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 119

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

Enabled by default in 119

This release of Chrome had 23 new features.

:user-valid and :user-invalid CSS pseudo-classes

The :user-invalid and the :user-valid pseudo-classes represent an element with incorrect or correct input, respectively, but only after the user has significantly interacted with it. This is similar to :valid and :invalid, but with the added constraint that these pseudo-classes only match after the user has interacted with the element.

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://developer.mozilla.org/en-US/docs/Web/CSS/:user-valid

Attribution Reporting Feature bundle: aggregation coordinator selection

We plan on landing the following change to the Attribution Reporting API focused on: - Multiple cloud providers support for aggregate reporting, supporting AWS and GCP **Note** This change will also affect Private Aggregation’s aggregatable reports by adding a new top-level field aggregation_coordinator_origin.

This feature was specified in this Spec.

CSS Relative Color Syntax (RCS)

The relative color syntax allows developers to define colors by modifying the parameters of other colors. For example: oklab(from magenta calc(l * 0.8) a b); Will result in an oklab magenta that is 80% as light. https://www.w3.org/TR/css-color-5/#relative-colors #

This feature was specified in this Spec.

CaptureStartFocusBehavior enum value "focus-capturing-application"

The Screen Capture API lets the user select a tab, window, or screen to capture as a media stream. Using the existing CaptureController setFocusBehavior() method, web apps control whether the captured tab or window will be focused when capture starts, or whether the browser will leave focus with whichever surface last had focus. The new enum value "focus-capturing-application" allows web apps to give a hint to the browser that the capturing page prefers to remain focused. The old value “no-focus-switch” now indicates that the application prefers that the user agent not change focus, leaving focus with whichever surface last had focus following the user's interaction with the user agent and/or operating system. In Chrome’s current implementation, this means leaving the capturing application focused. In the future, if Chrome adopts the macOS picker, it could behave differently on Mac. This behavior could prove useful for a11y-conscious applications that prefer to minimize the number of focus-changes a user experiences, as those can be challenging for users with screen-readers. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/WICG/conditional-focus/blob/main/README.md

No linked samples

Change SVGClipPathElement to inherit from SVGElement

SVGClipPathElement (the interface for the <clipPath> element) is changed to inherit from the SVGElement interface rather than the SVGGraphicsElement interface. #

This feature was specified in this Spec.

Clip-path geometry-box values

Clip-path supports <geometry-box> values to control the clip's reference box, making clip-path easier to use. These box values can be used alongside basic shapes (for example, clip-path: circle(50%) margin-box), or they can be used alone to clip to the specified box (for example, clip-path: content-box). #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://pr.gg/clip-path-geometry-box-examples.html

Clip-path xywh() and rect() values

Support the xywh() and rect() values on clip-path, which make it easier to specify rectangular or rounded-rectangular clips. #

This feature was specified in this Spec.

Cookie Expires/Max-Age attribute upper limit for prior storage

Since M104 cookies newly created or updated with an expiration date would have that date capped at no more than 400 days in the future. This same limit will now be retroactively applied to cookies already in storage to cap their expiration dates to no more than 400 days after the first time Chrome M119+ starts up and does a one time database migration. The impact of this change will not be felt by users until at least 400 days after M119 is released, and then only for existing cookies that have not been updated in that period. #

This feature was specified in this Spec.

Disallow unknown import attributes

Throw an error when using unknown keys in import attributes (formerly known as import assertions), such as "import 'x' assert { unknown: 'val' }`, rather than ignoring them. The only accepted attribute remains "type".

This feature was specified in this Spec.

DisplayMediaStreamOptions monitorTypeSurfaces

When getDisplayMedia() is called, the browser offers the user a choice of display surfaces: tabs, windows, or monitors. Using the monitorTypeSurfaces option, the web application may now hint to the browser if it prefers to include display surfaces whose type is monitor among the choices offered to the user. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/eladalon1983/screen-share-explainers/blob/main/monitorTypeSurfaces_Explainer.md

Samples: https://screen-sharing-controls.glitch.me

Horizontal rules inside select elements

This feature makes the HTML parser allow <hr> tags inside <select> tags. These <hr> elements create horizontal borders in between <option> elements in the listbox popup.

This feature was specified in this Spec.

Japanese Phrase Line Breaking

Changes the line breaking rules for Japanese to keep natural phrases (of multiple words) together. In Japanese, this boundary is called "Bunsetu". Japanese doesn't use spaces to delimit words, and usually prefers to break at any characters with some exceptions, but short paragraphs such as headlines prefer breaking at natural phrase boundaries. In CSS, this feature adds a new value to the `word-break` property: `auto-phrase`. The implementation uses a C++ port of the BudouX <https://github.com/google/budoux>, the AdaBoost ML technology to determine the natural phrase boundaries. #

This feature was specified in this Spec.

Resources

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

Samples: https://github.com/google/budouxhttps://google.github.io/budouxhttps://twitter.com/kojiishi/status/1687688315896733696

Payment handler minimal header UX

This is a refresh of the browser UI associated with the Payment Handler API. Although there are no changes to the API surface with this feature, we'd like to run an origin trial starting in M112 to give payment handler providers a chance to experiment with the new UI ahead of the launch.

Resources

Docs: https://crbug.com/1385136

No linked samples

Private Aggregation API bundled enhancements

We're planning a few bundled changes to Private Aggregation: - Null report fixes: Currently reports with no contributions are inadvertently dropped. This change ensures that, when a context ID is specified, a null report is sent even if budget is denied. Separately, it fixes a bug causing budget to always be denied for null reports. - Debug mode eligibility changes: Currently, debug mode is always available. This change only allows debug mode for callers that are allowed access to third-party cookies, silently dropping the debug mode otherwise. Note that this will allow debug mode to automatically sunset when third-party cookies are deprecated. - Padding report payloads: To avoid the payload size being dependent on the number of contributions, we will pad it with 'null' contributions to a fixed length. **Note**: this change will also affect Attribution Reporting reports. - Reducing delay: When a context ID is specified, we remove the randomized 10-60 minute delay, which is superfluous as a report is always sent in this case. Instead, we just wait until the Shared Storage operation timeout. Note this is a recreation of https://chromestatus.com/feature/5205079858085888 which had the wrong feature type. #

This feature was specified in this Spec.

Private Aggregation API bundled enhancements

We're planning a few bundled changes to Private Aggregation: - Null report fixes: Currently reports with no contributions are inadvertently dropped. This change ensures that, when a context ID is specified, a null report is sent even if budget is denied. Separately, it fixes a bug causing budget to always be denied for null reports. - Debug mode eligibility changes: Currently, debug mode is always available. This change only allows debug mode for callers that are allowed access to third-party cookies, silently dropping the debug mode otherwise. Note that this will allow debug mode to automatically sunset when third-party cookies are deprecated. - Padding report payloads: To avoid the payload size being dependent on the number of contributions, we will pad it with 'null' contributions to a fixed length. **Note**: this change will also affect Attribution Reporting reports. - Reducing delay: When a context ID is specified, we remove the randomized 10-60 minute delay, which is superfluous as a report is always sent in this case. Instead, we just wait until the Shared Storage operation timeout. Note that a duplicate feature was created for shipping reviews (e.g. Privacy, Security) as this has the incorrect feature type: https://chromestatus.com/feature/5148973702840320 #

This feature was specified in this Spec.

Promise.withResolvers

Promise.withResolvers is a static method that returns a new Promise along with its resolver functions, i.e. `const { promise, resolve, reject } = Promise.withResolvers()`. This is a standard version of a common helper function found in many JS libraries. Historically, some may know it as `defer` or `deferred`.

This feature was specified in this Spec.

Read Chrome device attributes

Device Attributes Web API is a subset of Managed Device Web API, that provides web applications the capability to query device information (device ID, serial number, location, etc). #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://github.com/WICG/WebApiDevice/blob/master/README.md

Remove Authorization header upon cross-origin redirect

The Fetch standard has updated to remove Authorization header on cross origin redirects. Chrome should follow the spec change. #

This feature was specified in this Spec.

Sec-CH-Prefers-Reduced-Transparency User Preference Media Features Client Hints Header

User Preference Media Features Client Hints Header defines a set of HTTP Client Hints headers around user preference media features as defined by Media Queries Level 5. If used as Critical Client Hints, these headers allow servers to make smart choices regarding, e.g., CSS inlining. Sec-CH-Prefers-Reduced-Transparency reflects the user's prefers-reduced-transparency preference. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://sec-ch-prefers-reduced-transparency.glitch.me

Standard compliant URL host punctuation characters

Make Chrome's handling of URL host punctuation characters standard compliant. Examples: Before: > const url = new URL("http://exa(mple.com";); > url.href 'http://exa%28mple.com/&apos; '(' is a forbidden character, however, Chrome permits it wrongly. After: > const url = new URL("http://exa(mple.com";); > => throws TypeError: Invalid URL. Before: > const url = new URL("http://exa!mple.com";); > url.href "http://exa%2Ample.com"; '!' is permitted, but escaping punctuation characters is non-compliant. After: > const url = new URL("http://exa!mple.com";); > url.href "http://exa!mple.com"; Here is a the summary of changes in M119: Notation: - 'ESC': Allowed, but Chrome escapes it, which is non-compliant. - '-': Allowed. - '0': Forbidden. URL will be invalid if the host contains a forbidden character. Warning: SPACE and ASTERISK is still non-compliant. | | Before | After | Standard | |-----+--------+-------+----------| | SPC | ESC | ESC | 0 | | ! | ESC | - | - | | " | ESC | - | - | | # | ESC | 0 | 0 | | $ | ESC | - | - | | & | ESC | - | - | | ' | ESC | - | - | | ( | ESC | - | - | | ) | ESC | - | - | | * | ESC | ESC | - | | + | - | - | - | | , | ESC | - | - | | - | - | #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://chromium-review.googlesource.com/c/chromium/src/+/4875754

WebAssembly Garbage Collection (WasmGC)

The GC proposal adds efficient support for high-level managed languages to WebAssembly, via struct and array types that enable language compilers targeting Wasm to integrate with a garbage collector in the host VM. In Chrome, enabling this feature implies enabling Typed Function References, which allow function references to be stored in the aforementioned structs and arrays. #

This feature was specified in this Spec.

WebCodecs AudioEncoder bitrateMode

Some audio codecs support specifying the audio encoder bitrate modes. This feature adds a "bitrateMode" flag with a default value of “variable” to WebCodec's AudioEncoderConfig, which mirrors the config option and default already present for VideoEncoderConfig. This flag will allow web authors to choose between encoding audio with a variable bitrate or a constant bitrate. Specific codec encoder implementations might have slightly different terminology (e.g. `CBR` vs `VBR` for Opus), but all of them should map to the general concept of "constant" versus "variable" bitrate. The two options have the following effects: “variable”: allows an audio encoder to increase or lower its bitrate according to the content of the audio it is encoding, in order to preserve bandwidth/binary-size, while still maintaining a target quality. For example, an encoder might lower its bitrate when encoding silence, and revert to a full bitrate when encoding speech. “constant” : forces an audio encoder to maintain the same bitrate, regardless of the audio content. This can be useful when a predictable bandwidth consumption is preferable. As of M119, this flag will affect two codecs on Chromium: Opus and AAC. #

This feature was specified in this Spec.

WebRTC Codec Selection API

This new API extends WebRTC encoding parameters to allow developers to choose a specific negotiated codec to be used for encoding an RTP stream. #

This feature was specified in this Spec.

Origin Trials in-progress in 119

This release of Chrome had 3 new origin trials.

Cookie Deprecation Labeling

This experiment exposes a temporary set of APIs which provide access to browser-determined treatment and control groups to support opt-in server side testing of the third-party cookie deprecation.

Protected Audience Bidding & Auction Services

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. This feature, Protected Audience Bidding & Auction Services, outlines a way to allow Protected Audience computation to take place on cloud servers in a Trusted Execution Environment, rather than running locally on a user's device. Moving computations to cloud servers can help optimize the Protected Audience auction, to free up computational cycles and network bandwidth for a device.

WebAssembly JS String Builtins

This feature exposes common JS string operations for easy import into WebAssembly and optimizations thereof. This allows creating and manipulating JS strings from WebAssembly without native support within WebAssembly while still allowing for a similar performance as native string references. The mechanism works by exposing suitably strict versions of JS string operations in the WebAssembly JS API. These can be imported by modules using externref as a generic data type for storing the strings. The engine can identify that these imports can be represented by native graph operators without the need for calling into JS. This leads to a comparable peak performance as native string operations while allowing quick interoperability with JS since no copying at the boundary is required when calling into arbitrary JS functions that consume strings.

This feature was specified in this Spec.

Flagged features in 119

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

'priority' HTTP request header

This feature adds the 'priority' request header for all HTTP requests with the priority information for the request at the time that it was sent. RFC 9218 (Extensible Prioritization Scheme for HTTP) defines a 'priority' HTTP request header to use for signaling request priority to origins (and intermediaries). It also defines negotiation processes and protocol-level frames for HTTP/2 and HTTP/3 to carry the same priority information. The header can only signal the initial priority for a resource when it was first requested while the frame-based mechanisms allow for modifying the priority after the fact. The header can operate end-to-end to the origin servers (and provide a mechanism for the origin to override the priority if recognized by intermediaries) while the frames are limited to operating on a link level. This feature is specifically for supporting the header-based prioritization scheme. #

This feature was specified in this Spec.

CSS Exponential Functions

Add css exponential functions: pow(), sqrt(), hypot(), log(), exp() to CSS math expressions.

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 Stepped Value Functions

The stepped-value functions, round(), mod(), and rem(), all transform a given value according to another "step value". The round() CSS function returns a rounded number based on a selected rounding strategy. The mod() CSS function returns a modulus left over when the first parameter is divided by the second parameter, similar to the JavaScript remainder operator (%). The modulus is the value left over when one operand, the dividend, is divided by a second operand, the divisor. It always takes the sign of the divisor. The rem() CSS function returns a remainder left over when the first parameter is divided by the second parameter, similar to the JavaScript remainder operator (%). The remainder is the value left over when one operand, the dividend, is divided by a second operand, the divisor. It always takes the sign of the dividend. #

This feature was specified in this Spec.

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

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

Horizontal rules inside select elements

This feature makes the HTML parser allow <hr> tags inside <select> tags. These <hr> elements create horizontal borders in between <option> elements in the listbox popup.

This feature was specified in this Spec.

Improvements to styling structure of <details> and <summary> elements

Support more CSS styling for the structure of <details> and <summary> elements to allow these elements to be used in more cases where disclosure widgets or accordion widgets are built on the web. In particular, this change removes restrictions that prevented setting the display property on these elements, and adds a ::details-content pseudo-element to style the container for the part that expands and collapses. #

This feature was specified in this Spec.

Intersection Observer Scroll Margin

Intersection Observer scrollMargin allows developers to observe targets inside nested scroll containers that are currently clipped away by the scroll containers. This is achieved by expanding the container's clipping rect by the scrollMargin when calculating the intersection. #

This feature was specified in this Spec.

field-sizing CSS property

By 'field-sizing' property, web authors can disable fixed default sizes of form controls, and make their size depend on their content. It's very easy to provide automatically-growing text fields. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/tkent-google/explainers/blob/main/form-sizing.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 119

This release of Chrome had 4 features deprecated.

Deprecate and Remove WebSQL

The Web SQL Database standard was first proposed in April 2009 and abandoned in November 2010. Gecko never implemented this feature and WebKit deprecated this feature in 2019. The W3C encouraged those needing web databases to adopt Web Storage or Indexed Database. Ever since its release, it has made it incredibly difficult to keep our users secure. SQLite was not initially designed to run malicious SQL statements, and yet with WebsQL we have to do exactly this. Having to react to a flow of stability and security issues is an unpredictable cost to the storage team. With SQLite over WASM as its official replacement, we want to remove WebSQL entirely. #

This feature was specified in this Spec.

Resources

Docs: https://developer.chrome.com/blog/deprecating-web-sqlhttps://docs.google.com/document/d/1bTj_nDqbdvE102sCm3KuwvN5c_HneLNPl9mmPeUjG4M/edit?usp=sharinghttps://docs.google.com/document/d/1CDdEO65pCIo60NM8CWHNNN7EunJ-wd8v1dGUxTOBJrM/edit?resourcekey=0-R0fxP199QQ-8gnMqzmQyrw

No linked samples

Deprecate non-standard `shadowroot` attribute for declarative shadow DOM

The standards-track `shadowrootmode` attribute, which enables declarative Shadow DOM, was shipped in Chrome 111 [1]. The older, non-standard `shadowroot` attribute is now deprecated. During the deprecation period, both attributes are functional, however the `shadowroot` attribute does not enable the new streaming behavior, whereas `shadowrootmode` allows streaming of content. There is a straightforward migration path: replace `shadowroot` with `shadowrootmode`. The old `shadowroot` attribute is deprecated as of Chrome M112, and it will be removed (no longer supported) in Chrome M119, which goes to Stable on November 1, 2023. [1] https://chromestatus.com/feature/5161240576393216 #

This feature was specified in this Spec.

Remove Sanitizer API

The Sanitizer API (https://chromestatus.com/feature/5786893650231296) aims to build an easy-to-use, always secure, browser-maintained HTML sanitizer into the platform. It is a cross-browser standardization effort starting in Q2/2020. We shipped an initial version of the Sanitizer API in M105, based on the then-current specification draft. However, the discussion has meanwhile moved on and the proposed API shape has changed substantially. In order to prevent the current API from becoming entrenched we would like to remove the current implementation. We expect to re-implement the Sanitizer API when the proposed specification stabilizes again. Use counters: The Sanitizer API is currently used on 0.000000492% of page visits. Old vs new API: * Old explainer, API as implemented in "MVP" since M105: https://github.com/WICG/sanitizer-api/blob/e72b56b361a31b722b4e14491a83e2d25943ba58/explainer.md * New explainer (still in progress): https://github.com/WICG/sanitizer-api/blob/main/explainer.md #

This feature was specified in this Spec.

Replace dangling markup in target name to `_blank`

This change replaces the navigable target name (which is usually set by target attribute) to `_blank`, if it contains a dangling markup (i.e. `\n` and `<`). Which fixes a bypass in the dangling markup injection mitigation. #

This feature was specified in this Spec.

Removed features in 119

This release of Chrome had 0 features removed.