Chrome Release Summary

Chrome version: 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 105

Enabled (23) | Origin Trial (1) | Behind a flag (1) | Deprecated (0) | Removed (2)

Enabled by default in 105

This release of Chrome had 23 new features.

'blocking=rendering' attribute on scripts and style sheets

Allows putting 'blocking=render' as an attribute and value to a <script>, <style> or stylesheet <link> to make it explicitly render-blocking. The main usage is to avoid a flash of unstyled content or user interactions with an unmature page caused by, e.g., script-inserted scripts/stylesheets, client-side A/B testing and etc. #

This feature was specified in this Spec.

:has() pseudo class

The :has() pseudo class is a selector that specifies an element which has at least one element that matches the relative selector passed as an argument. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://css-has.glitch.mehttps://has-pseudo-class-performance.glitch.me

Add onbeforeinput global event handler content attribute

The 'beforeinput' event fires when the value of an <input>, <textarea>, or contenteditable element is about to be modified. Add an 'onbeforeinput' global content attribute to make it easier for developers to use. #

This feature was specified in this Spec.

CSS :modal Pseudo Class

A pseudo class selector to style dialog element. The :modal pseudo-class represents an element which is in a state that excludes all interaction with elements outside it until it has been dismissed. #

This feature was specified in this Spec.

Container Queries

Container Queries allow authors to style elements according to the size of a container element. It's similar to a @media query, except it evaluates against the size of a container instead of the size of the viewport. #

This feature was specified in this Spec.

Custom Highlight API

The custom highlight API provides a way for web developers to style the text of arbitrary ranges. This is useful in a variety of scenarios, including editing frameworks that wish to implement their own selection, find-on-page over virtualized documents, multiple selections to represent online collaboration, or spellchecking frameworks. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1vaWiPLA9opz0AObbObuRj3P5zqzoM2ldy0pHkZkJyxo

No linked samples

Default SVG cursor size set from OS settings

Platform cursor size used as default for custom SVG cursors if no specified size. SVG cursors can scale based on the platform accessibility/cursor settings. This can be overridden if the cursor has any specified dimensions. This feature is initially available on Windows only. #

This feature was specified in this Spec.

DisplayMediaStreamConstraints.systemAudio

Hint indicating to the user agent whether the application, upon calling getDisplayMedia() with {systemAudio: true}, wishes *system audio* to be offered to the user. (If not - only offer tab-audio.) #

This feature was specified in this Spec.

Element.checkVisibility method

Element.checkVisibility() returns true if the element is visible, and false if it is not. It checks a variety of factors that would make an element invisible, including display:none, visibility, content-visibility, and opacity. #

This feature was specified in this Spec.

Expose TransformStreamDefaultController

This exposes the TransformStreamDefaultController class on the global scope. This class already exists and can be accessed using code such as let TransformStreamDefaultController; new TransformStream({ start(c) { TransformStreamDefaultController = c.constructor; } }); This change makes such code unnecessary as now TransformStreamDefaultController just exists on the global scope. #

This feature was specified in this Spec.

Prerender2 for Desktop

To achieve parity among the all supporting platforms, we are implementing Prerender2 for Desktop (as an addition to Android). We are going to ship same-origin prerendering triggered by the speculation rules API and Omnibox (same as current triggers for Android). See also [1] Same-origin prerendering triggered by the speculation rules API [1] https://chromestatus.com/feature/5355965538893824 #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1EpLshvc9RRW3vswmXsJGrbCkhlFmxDsWfbvgxmYDTfs

No linked samples

Prevent overscroll for fixed elements.

When a user overscrolls, all elements on the page (including fixed elements) move in response to the overscroll. This feature prevents fixed elements from moving during overscroll. features=FixedElementsDontOverscroll Spec discussion: https://github.com/w3c/csswg-drafts/issues/6299 #

This feature was specified in this Spec.

Response.json()

Improves ergonomics for creating JSON Response objects. The Response constructor allows for creating the body of the response from many types, however it is not possible to directly create a JSON object. The Response.json() static method fills this gap. It returns a Response object with a body consisting the first argument serialized as JSON. The second argument is a ResponseInit option bag as with the Response constructor. #

This feature was specified in this Spec.

Same-origin prerendering triggered by the speculation rules API

Prerendering loads a web page before it is needed, so that when the actual navigation to that page occurs, it can be shown instantly. #

This feature was specified in this Spec.

Resources

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

Samples: https://prerender2-specrules.glitch.me

Syntax changes to markup based Client Hints delegation

There is existing HTML syntax to delegate client hints to third-party content which requires client information lost by user agent reduction. Example: <meta name="accept-ch" value="sec-ch-dpr=(https://foo.bar https://baz.qux), sec-ch-width=(https://foo.bar)"> We shipped this syntax in M100 and got belated developer feedback that it’s confusing. We reached the conclusion it’s not too late to change course due to low adoption so far. This intent proposes a replacement syntax with the same feature set. Example: <meta http-equiv="delegate-ch" value="sec-ch-dpr https://foo.bar https://baz.qux; sec-ch-width https://foo.bar"> This proposal also removes the older syntax introduced in M100. #

This feature was specified in this Spec.

Viewport-height client hint

Currently, Responsive Image Client Hints provide a way for origins to obtain the viewport’s width. However, no such attribute exists for viewport height. We’ve observed that to optimize the loading of content that appears in viewport, it is essential for the origins to adapt HTML response based on viewport height. #

This feature was specified in this Spec.

Window Controls Overlay for Installed Desktop Web Apps

When the window controls overlay is enabled for installed desktop web apps, the app's client area is extended to cover the entire window--including the title bar area--and the window control buttons (close, maximize/restore, minimize) are overlaid on top of the client area. The web app developer is responsible for drawing and input-handling for the entire window except for the window controls overlay. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/WICG/window-controls-overlay/blob/main/explainer.md

Samples: https://amandabaker.github.io/pwa/explainer-example/index.html

Window Management: Accurate Screen Labels

Enhances screen label strings provided by the Window Management API: <https://chromestatus.com/feature/5252960583942144> This launch refines the `ScreenDetailed.label` implementation by replacing the current placeholder values (e.g. 'External Display 1') with data sourced from display device EDIDs (e.g. 'HP Z27n') and higher-level OS APIs (e.g. localized descriptions such as 'Built-in Retina Display'). These more accurate labels match those shown by OSes in display settings UI surfaces. The labels are only exposed to sites which have been granted the window-management permission by the user. This revised implementation aligns with the current attribute specification <https://w3c.github.io/window-management/#screen-label> and definitions used for the M93-M96 Origin Trial and the M100 API launch. There is no structural change to the API, only a change in the string content returned by the `ScreenDetailed.label` attribute. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/11DlNwb0LIsuekeL5JC3Puc-IK8OmOWfmb8b_yzfp3Ss/edit?resourcekey=0-gjUuuifqnrd1KMqQ9JX3tw

Samples: https://michaelwasserman.github.io/window-placement-demo

Worklet loading is reported to Resource Timing

When a worklet module is fetched, e.g. via CSS.paintWorklet.addModule(), the fetched resource is now available in resource timing and in PerformanceObservers. window.performance.getEntries() or window.performance.getEntriesByType("resource") would also show worklet resources, which were not present there before despite being loaded. #

This feature was specified in this Spec.

Writable directory prompts for the File System Access API

Allow returning a directory with both read and write permissions in a single prompt for the File System Access API. Currently showDirectoryPicker() always returns a read-only directory (after showing a read access prompt), requiring a second prompt to get write access. This double-prompt is a poor user experience and contributes to confusion and permission fatigue among users. Adds an optional "mode" option to DirectoryPickerOptions which can be specified as either "read" or "readwrite". #

This feature was specified in this Spec.

import.meta.resolve()

import.meta.resolve(specifier) returns the URL to which the given specifier would resolve in the context of the current script. That is, it returns the URL that would be imported if you did import(specifier). #

This feature was specified in this Spec.

navigateEvent.intercept()

intercept() works very similarly to the existing navigateEvent.transitionWhile() method, except that instead of taking a mandatory Promise, it takes an optional handler function. We will send a separate Intent to Deprecate and Remove for navigateEvent.transitionWhile(). #

This feature was specified in this Spec.

navigateEvent.scroll()

scroll() works very similarly to the existing restoreScroll() except that it can be called when the navigation is not a traversal. It also allows manually performing the scroll even when not in manual scroll mode. #

This feature was specified in this Spec.

Origin Trials in-progress in 105

This release of Chrome had 1 new origin trials.

fetch() upload streaming

Fetch upload streaming lets web developers make a fetch with a ReadableStream body. Fetch provides a generic definition of Request and Response objects (and other things involved with network requests). #

This feature was specified in this Spec.

Resources

Docs: http://bit.ly/3asqra2

No linked samples

Flagged features in 105

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

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

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.1 of ORB - Chrome's first step toward full ORB implementation. For interop web authors should check Content-Type headers of their resources and indicate multimedia content when needed (e.g. audio/*, application/dash+xml, etc). #

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 105

This release of Chrome had 0 features deprecated.

Removed features in 105

This release of Chrome had 2 features removed.

CSS default keyword is disallowed in custom identifiers

The CSS keyword 'default' is not allowed within CSS custom identifiers, which are used for many types of user-defined names in CSS (for example, names created by @keyframes rules, counters, @container names, custom layout or paint names). This adds 'default' to the list of names that are reserved from being used in custom identifiers, which already reserve 'inherit', 'initial', 'unset', 'revert', and 'revert-layer'. #

This feature was specified in this Spec.

Gesture Scroll DOM events

Gesture Scroll DOM events, namely “gesturescrollstart”, “gesturescrollupdate” and “gesturescrollend” are non-standard APIs, which were added to Blink for use in plugins, but it appears they were also exposed to the web unintentionally. Plugins are no longer web-exposed since the deprecation of Google Native Client (NaCl). WebKit Bug: https://bugs.webkit.org/show_bug.cgi?id=92281 Changelog: https://bugs.webkit.org/attachment.cgi?id=155046&action=prettypatch #

This feature was specified in this Spec.