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 117

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

Enabled by default in 117

This release of Chrome had 33 new features.

Array grouping

Adds news Object.groupBy(iterable, groupCallback) and Map.groupBy(iterable, groupCallback) to perform a grouping or bucketing operation. The Object method returns a plain object, where the groups are property keys. The Map method returns a Map, where the keys can be arbitrary values. #

This feature was specified in this Spec.

Attribution Reporting Feature bundle: Lookback windows, flex-lite

We plan on landing a number of changes to the Attribution Reporting API focused on: - registration ergonomics - support for developer controlled configurations that allow for callers to specify precisely the information they want out of reports, in order to more efficiently extract utility out of the privacy mechanism Spec changes - Allow expiry, event_report_window, aggregatable_report_window fields to be integers - Lookback window in filters - Developer defined configurations for reporting windows and maximum # of reports - Separate verbose debug report for start time - Reduce min event report window time from 1 day to 1 hour and prohibit negative durations

This feature was specified in this Spec.

CSS @starting-style Rule

Allow authors to start CSS transitions on first style update CSS transitions do not trigger transitions from initial styles on the first style update for an element, or when the display type changes from 'none' to some other type. That is done to avoid unexpected transitions from initial styles. If the author wants to start a transition from the first style update, that can now be done by applying styles from within a @starting-style rule. If there is no pre-existing style for an element, but there are selectors inside @starting-style rules that match the element, a style is computed with rules inside @starting-style matching, before the actual style is computed without @starting-style rules matching. Any differences in computed style for transitioned properties will trigger transitions between the styles with and without @starting-style rules applied. Example which starts a background-color transition from green to lime on the first style update for a div: div { transition: background-color 0.5s; background-color: lime; } @starting-style div { background-color: green; } } #

This feature was specified in this Spec.

CSS Subgrid

Implements the CSS Grid Layout Module Level 2 specification, which introduces the concept of a "subgrid" to nested grid containers. #

This feature was specified in this Spec.

Resources

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

No linked samples

CSS cap and rcap font units

'cap' is equal to the used cap-height of the first available font. 'rcap' is equal to the value of the cap unit on the root element.

This feature was specified in this Spec.

CSS overlay property

Introduce an overlay property to allow authors to keep elements in the top layer for an exit transition. The overlay property is added to indicate if an element is in the top layer or not. It can take two values: 'none', 'auto'. User agent stylesheets add !important rules to control whether elements are rendered in the top layer or not, and not let author styles override. However, authors can add 'overlay' to the list of transition-properties for an element to defer the removal from the top layer for the duration of the transition. That way the author can do exit transitions for elements like dialogs: transition-property: overlay transition-duration: 0.4s #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://github.com/chrishtr/rendering/blob/master/entry-exit-animations.md#example-code

CSS text-wrap: pretty

Adjusts line breaking to avoid a short single word on the last line (also known as typographic orphans.) When `text-wrap: pretty` is specified, paragraphs that will end up with a short single word on the last line are adjusted so that the last line has two or more words. It also adjusts hyphenation if consecutive hyphenated lines appear at the end of a paragraph. The algorithm is based on the Knuth-Plass algorithm, as used by TeX. It computes scores for all candidates, and chooses the best one. To balance between the typographic benefits and the performance impacts, it adjsuts the last 4 lines of paragraphs that meet certain conditions. #

This feature was specified in this Spec.

Resources

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

Samples: https://output.jsbin.com/hopejeb

CSS transition-behavior property

The transition-behavior CSS property is a longhand of the transition property which allows discrete properties to be used in transitions. By specifying the "allow-discrete" value for transition-behavior, discrete properties will now start animations and flip from their initial value to their final value at 50%, except for transitions where display:none and content-visibility:hidden are one of the initial or final values, in which case the visible value will be used for the entire duration of the transition. More details here: https://drafts.csswg.org/css-transitions-2/#transition-behavior-property #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://output.jsbin.com/buquher/quiet

Change beforeunload handler dialog condition

To comply with HTML standard, there are two new changes on how the cancel dialog gets prompted for beforeunload event. 1. If event.preventDefault() is called, prompt cancel dialog. 2. If event.returnValue is the empty string, do not prompt cancel dialog.

This feature was specified in this Spec.

Clear Client Hints via Clear-Site-Data header

Websites will now be able to clear the client hints cache using `Clear-Site-Data: “clientHints”`. Client hints will also now be cleared when “cookies”, “cache”, or “*” are targeted by the same header. This is because if the user clears cookies in the UI client hints are already cleared as well, the client hints cache is a cache, and to be consistent with wildcard targets respectively. #

This feature was specified in this Spec.

Clear-Site-Data header wildcard syntax

Websites will now be able to clear all storage targets (“cookies”, “cache”, and “storage”) by sending `Clear-Site-Data: “*”`. Note that Chrome does not support clearing “executionContexts” at the moment, but if we added it in the future any header targeting “*” would then clear them too. #

This feature was specified in this Spec.

CustomElementsGetName

customElements.getName() returns the tag name of the given custom element definition. #

This feature was specified in this Spec.

Make CaptureController derive from the EventTarget interface

The CaptureController interface enables further manipulation of a screen capture session. In the future, it is expected that the events related to a capture session are dispatched on that controller. To be able to manage listeners for such events, the EventTarget methods are made available on CaptureController.

This feature was specified in this Spec.

MathML columnspan/rowspan attributes on <mtd> element

Implement attributes to specify the number of columns and rows that a MathML table cell is to span. This is similar to HTML colspan/rowspan attributes and does not have equivalent CSS properties.

This feature was specified in this Spec.

Opaque Response Blocking (ORB, aka CORB++) v0.2

Opaque Response Blocking (ORB) is a replacement for Cross-Origin Read Blocking (CORB - https://chromestatus.com/feature/5629709824032768). CORB and ORB are both heuristics that attempt to prevent cross-origin disclosure of “no-cors” subresources. This entry tracks "v0.2" of ORB - Chrome's second step toward full ORB implementation. ORB specifies error handling for blocked resources differently from CORB: ORB raises network errors, while CORB injects an empty response. ORB "v0.1" still used CORB-style response injection. This change brings our implementation more in line with the ORB proposal, by changing the error handling of all fetches (except when initiated by a script) to be compliant with ORB. We've made a carve-out for script-initiated fetches (where we retain CORB behaviour for now) to limit compatibility risk. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/whatwg/fetch/pull/1442

No linked samples

Per-frame quantizer in VideoEncoder

Adds "quantizer" VideoEncoderBitrateMode for VideoEncoder. This allows to specify quantizer parameter for each frame for AV1, VP9, and AVC video codecs. Explainer: https://gist.github.com/Djuffin/3722232679b977058be787be0dff4254 #

This feature was specified in this Spec.

PerformanceResourceTiming deliveryType

Expose information about how a resource was delivered. For example, resources which were delivered from the cache (currently exposed through transferSize) and navigations which were prefetched by the previous page are useful to identify. #

This feature was specified in this Spec.

Port overflow check in URL setters

The port value will be checked when setting url.port. All the values that overflows the 16-bit numeric limit will be no longer valid. For instance the following script behave differently after the change: ``` u = new URL("http://test.com"); u.port = 65536; console.log(u.port); ``` Before the change the output is 65536. After the change the output will be 80. #

This feature was specified in this Spec.

Protected Audience directFromSellerSignals via HTTP response headers

Protected Audience already supports a mechanism to ensure the authenticity and integrity of information passed into the auction from the seller called directFromSellerSignals. Currently this is implemented by the seller providing subresources in a WebBundle to the browser, which after a year of testing has proved to not be as efficient as originally planned. It either requires an entirely new additional fetch of a WebBundle, or for the seller to rewrite and rework an existing fetch to respond instead with only a WebBundle. This feature is a rewrite of directFromSellerSignals to use an HTTP response header, transferred via HTTPS same-origin with the seller, instead of a WebBundle to optimize performance.

RFC 7616 Digest auth: Support SHA-256 and username hashing

This change adds SHA-256 and username hashing support to HTTP Digest authentication. It brings Chrome to parity with Firefox that already supports SHA-256. #

This feature was specified in this Spec.

Removal of WebRTC getStats datachannelIdentifier -1

The WebRTC getStats API exposes a dataChannelIdentifier property https://w3c.github.io/webrtc-stats/#dom-rtcdatachannelstats-datachannelidentifier It will no longer provide the value "-1" in cases where statistics are queried before the datachannel connection is established. Instead, the dictionary member will be omitted. This follows the general pattern not to return meaningless information described in https://w3c.github.io/webrtc-stats/#guidelines-for-implementing-stats-objects

Removal of WebRTC getStats encoderImplementation/decoderImplementation "unknown"

The WebRTC getStats API exposes the encoder and decoder implementation names for outbound and inbound video: https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-encoderimplementation It will no longer provide the value “unknown” in cases where statistics are queried before a video frame was encoded or decoded. Instead, the dictionary member will be omitted. This follows the general pattern not to return meaningless information described in https://w3c.github.io/webrtc-stats/#guidelines-for-implementing-stats-objects

Storage Access API with Prompts

Provides a means for authenticated cross-site embeds to check their access to (unpartitioned) cookies and request access if they are blocked. Supports user prompts, and additionally includes user-agent-specific behaviors.

This feature was specified in this Spec.

TLS Encrypted Client Hello (ECH)

The TLS Encrypted ClientHello (ECH) extension enables clients to encrypt ClientHello messages, which are normally sent in cleartext, under a server’s public key. This allows websites to opt-in to avoid leaking sensitive fields, like the server name, to the network by hosting a special HTTPS RR DNS record. (Earlier iterations of this extension were called Encrypted Server Name Indication, or ESNI.) If your organization’s infrastructure relies on the ability to inspect SNI, for example, filtering, logging, and so on, you should test it. You can enable the new behavior by navigating to chrome://flags and enabling the #encrypted-client-hello flag. If you notice any incompatibilities, you can use the EncryptedClientHelloEnabled enterprise policy to disable support for ECH. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://tls-ech.dev

URL Standard-compatible IPv4 embedded IPv6 host parser

The behavior of parsing IPv4 embedded IPv6 host parser will be updated to strictly follow the web URL standard: https://url.spec.whatwg.org/#concept-ipv6-parser The introduced restrictions on the IPv6 address are: * The embedded IPv4 address shall always consist of 4 parts. Addresses with less than 4 parts like http://[::1.2] will be no longer valid. The feature is a part of the URL interop 2023. #

This feature was specified in this Spec.

Resources

No linked docs

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

URL: Allow "%00" as a valid URL path

Chrome currently considers a URL invalid if the URL's path part contains "%00" (or null), which is not compliant with the URL Standard [1]. For example, the following test fails in Chrome because new URL(..) throws an Invalid URL exception. assertEquals(new URL("http://example.com/%00").pathname, "/%00"); According to the URL Standard, any character or byte sequence in URL path should not make the URL invalid. Note: In other parts of URL, "%00" may still be considered invalid. For example, new URL("http://example%00.com/"); throws an exception because "%00" is not a valid host codepoint. - [1] https://url.spec.whatwg.org/ #

This feature was specified in this Spec.

Warning on insecure downloads

To ensure users are aware of the risks of downloads delivered over an insecure connection, Chrome will display a bypassable warning for some downloads delivered over an insecure connection. Which downloads are warned about will depend on whether the user has enabled HTTPS-First Mode and whether the file type has a substantial risk of parsing vulnerabilities that can lead to code execution. #

Web Serial support for Bluetooth RFCOMM services

Support Bluetooth RFCOMM services in the Web Serial API. The Bluetooth RFCOMM (Radio frequency communication) protocol provides emulated RS-232 serial ports. This feature would enable applications to make connections to RFCOMM services on paired Bluetooth Classic devices using the Web Serial API. #

This feature was specified in this Spec.

WebHID in Extension Service Workers

Allows web developers to use the WebHID API in service worker contexts in extensions by exposing WebHID API to extension service workers. #

This feature was specified in this Spec.

WebRTC RTP header extension control

Extend the WebRTC RTCRtpTransceiver API to offer control over which RTP header extensions are negotiated. #

This feature was specified in this Spec.

WebUSB exclusionFilters option in requestDevice()

The "exclusionFilters" option in navigator.usb.requestDevice() allows web developers to exclude some devices from the browser picker. It can be used to exclude devices that match a broader filter but are unsupported. #

This feature was specified in this Spec.

contain-intrinsic-size: auto none support

This feature extends the existing contain-intrinsic-size syntax: none | <length> | auto && <length> to also include auto && none: none | <length> | auto && <length> | auto && none The reason for this change is the CSSWG resolution (https://github.com/w3c/csswg-drafts/issues/8407#issuecomment-1440466558) to add an interaction between content-visibility: auto and contain-intrinsic-size. Specifically, that the former adds an "auto" keyword to the latter. For this to work, the resolution includes a note to extend contain-intrinsic-size syntax for "auto" to work with all existing keywords, including "none". #

content-visibility: auto implies contain-intrinsic-size: auto

This feature is a result of a CSSWG resolution: https://github.com/w3c/csswg-drafts/issues/8407#issuecomment-1440466558 content-visibility: auto is a property that can be used to optimize rendering of off-screen content. However, when rendering is optimized it also means that the size of the element cannot be determined using the descendant information. This is done with size containment. As a result, contain-intrinsic-size was added to help with this. When content-visibility: auto skips contents, contain-intrinsic-size determines its size (roughly as if it had a single child of specified size). contain-intrinsic-size also has an option to add an "auto" keyword which means "if the element has been previously rendered, then use that size; if not, use the specified size". This helps with layout stability by ensuring that elements that come into the viewport and then leave remain the same size as before. This feature tracks forcing contain-intrinsic-size: auto if content-visibility's value is auto. #

This feature was specified in this Spec.

Origin Trials in-progress in 117

This release of Chrome had 2 new origin trials.

Compression dictionary transport with Shared Brotli and Shared Zstandard

This feature adds support for using designated previous responses, as an external dictionary for content encoding compressing responses with Brotli or Zstandard. Enterprises might experience potential compatibility issues with enterprise network infrastructure that intercepts HTTPS traffic and is sensitive to unknown content encodings. The enterprise policy "CompressionDictionaryTransportEnabled" is available to turn off the compression dictionary transport feature. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1IcRHLv-e9boECgPA5J4t8NDv9FPHDGgn0C12kfBgANg/edithttps://github.com/WICG/compression-dictionary-transporthttps://datatracker.ietf.org/doc/draft-ietf-httpbis-compression-dictionaryhttps://docs.google.com/document/d/1WCK965Ew0hTN6k05o2JFi9Y-AdGfkB1io_i6LrTSeQs/edit?usp=sharing

Samples: https://compression-dictionary-transport-threejs-demo.glitch.mehttps://compression-dictionary-transport-shop-demo.glitch.me

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

Flagged features in 117

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

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

Media Queries: prefers-reduced-transparency feature

Adds the `prefers-reduced-transparency` feature, which lets authors adapt web content to user-selected preference for reduced transparency in the OS, such as the 'Reduce transparency' setting on macOS. Valid options are 'reduce' or 'no-preference'. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-transparency#examples

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.

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.

Storage Access API with Prompts

Provides a means for authenticated cross-site embeds to check their access to (unpartitioned) cookies and request access if they are blocked. Supports user prompts, and additionally includes user-agent-specific behaviors.

This feature was specified in this Spec.

WebAssembly Multi-Memory

Add support for more than one memory per WebAssembly module as specified in the WebAssembly Multi-Memory proposal: https://github.com/WebAssembly/multi-memory/blob/main/proposals/multi-memory/Overview.md #

This feature was specified in this Spec.

Resources

Docs: https://github.com/WebAssembly/multi-memory/blob/main/proposals/multi-memory/Overview.md

No linked samples

Zstd Content-Encoding

Zstandard, or “zstd”, is a data compression mechanism described in RFC8878. It is a fast lossless compression algorithm, targeting real-time compression scenarios at zlib-level and better compression ratios. The "zstd" token was added as an IANA-registered Content-Encoding token as per https://datatracker.ietf.org/doc/html/rfc8878#name-content-encoding. Adding support for "zstd" as a Content-Encoding will help load pages faster and use less bandwidth, and spend less time and CPU/power on compression on our servers, resulting in reduced server costs. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1aDyUw4mAzRdLyZyXpVgWvO-eLpc4ERz7I_7VDIPo9Hc/edit?usp=sharinghttps://docs.google.com/document/d/14dbzMpsYPfkefAJos124uPrlkvW7jyPJhzjujSWws2k/edit?usp=sharing

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 117

This release of Chrome had 3 features deprecated.

CSS property -webkit-highlight

Remove the CSS property -webkit-highlight intended to highlight text, but never standardized. It has no visible effect in chromium (it is parsed but never used in rendering content). The property was removed from WebKit in 2014 (https://bugs.webkit.org/show_bug.cgi?id=128456), has been marked as deprecated on MDN, and has been replaced recently with the CSS Highlight Pseudo spec (https://www.w3.org/TR/css-pseudo-4/#highlight-pseudos). #

Deprecate TLS SHA-1 server signatures

Chrome is removing support for signature algorithms using SHA-1 for server signatures during the TLS handshake. This does not affect SHA-1 support in server certificates, which was already removed, or in client certificates, which continues to be supported. SHA-1 can be temporarily re-enabled via the temporary InsecureHashesInTLSHandshakesEnabled enterprise policy. This policy will be removed in Chrome 123. #

This feature was specified in this Spec.

[WebRTC] Unship callback-based legacy getStats()

RTCPeerConnection has two versions of getStats(), one that is spec-compliant returning the report via resolving a promise, and one that is non-standard returning a very different report via a callback as the first argument. The callback-based was removed in M117, with a Deprecation Trial available until M121. As of M122, the API does not anymore, even if you use the Deprecation Trial. #

Removed features in 117

This release of Chrome had 0 features removed.