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 149

Enabled (13) | Origin Trial (4) | Behind a flag (7) | Deprecated (0) | Removed (0)

Enabled by default in 149

This release of Chrome had 13 new features.

CSS Gap Decorations

CSS Gap Decorations enables styling of gaps in container layouts like Grid and Flexbox, similar to ‘column-rule’ in multicol layout. This feature is highly requested by web authors who must use hacks to style the gaps in Grid and Flexbox layouts today. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://microsoftedge.github.io/Demos/css-gap-decorations

Clip Text overflow on user interaction

When a user interacts (editing or caret navigation) with text which has ‘text-overflow: ellipsis’ set, the text switches temporarily from ellipsis to clip allowing the user to see and interact with the hidden overflow content. This feature applies to all editable and non-editable elements. For form controls (textarea, input), the behavior is already supported. #

This feature was specified in this Spec.

Disconnect WebSockets on BFCache entry

Active WebSocket connections no longer prevent a page from entering the Back/Forward Cache (BFCache). By closing connections on BFCache entry instead of marking the document as ineligible, the browser allows pages with active websockets to be stored and restored. #

This feature was specified in this Spec.

Intl.Locale.prototype.variants

Add Intl.Locale.prototype.variants as stated in https://tc39.es/ecma402/#sec-Intl.Locale.prototype.variants and also accept "variants" in option bag in Intl.Locale consturctor as in https://tc39.es/ecma402/#sec-updatelanguageid The changes to ECMA402 is merged in https://github.com/tc39/ecma402/pull/960 and the test code in test262 are merged in in https://github.com/tc39/test262/pull/4474/

This feature was specified in this Spec.

Payment Request: Allow payment handlers to report back internal errors

Enables payment handlers that are accessed via the Payment Request API to return distinct errors for "user cancelled" vs "internal payment app error". This allows web developers to build better flows for users, e.g. by retrying or falling back to a different flow when an internal app error occurs, whilst properly stopping the flow if the user wants to cancel. The Web-based Payment Handler API can indicate this difference based on what error they use to reject the promised passed to PaymentRequestEvent.respondWith. If the promise is rejected with an OperationError, then "internal app error" (OperationError) is returned to the merchant via the PaymentRequest.show(), otherwise "user cancel" (AbortError) is returned. Native app payment handler infrastructure is similarly updated, but is out of scope for web APIs. #

This feature was specified in this Spec.

Remove explicit border color UA stylesheet rule for tables

This change removes the erroneous `border-color: gray` CSS rule from the UA stylesheet for the `<table>` element. The spec does not contain this rule: https://html.spec.whatwg.org/multipage/rendering.html#tables-2 and it causes the borders to incorrectly not default to currentColor. Neither Firefox nor Webkit have this `gray` border color rule in their UA stylesheet, leading to interop problems. #

This feature was specified in this Spec.

Respect autocorrect="off" for Windows touch keyboard in TSF

The HTML autocorrect attribute allows web authors to control whether autocorrection should be applied to user input in editable elements including <input>, <textarea>, and contenteditable hosts. On Windows, the touch keyboard ignores this attribute and always autocorrects words. For example, typing "truf" followed by space in an element with autocorrect="off" yields "true " instead of preserving "truf ". This feature makes Chrome's TSF integration detect and revert touch keyboard autocorrections when the focused editable element has autocorrect="off" set. #

This feature was specified in this Spec.

Selective Clipboard Format Read

Enhances the Asynchronous Clipboard API by deferring actual clipboard data retrieval from the OS until the web application calls getType(). Instead of eagerly fetching all available formats at read() time, the browser now returns ClipboardItem objects with available MIME types but without the underlying data, and reads from the OS clipboard only when getType() is invoked. const items = await navigator.clipboard.read(); // No data read yet const text = await items.getType('text/plain'); // Only 'text/plain' data read here This reduces CPU usage, improves the perceived responsiveness of the API call, and optimizes the browser's power consumption. #

This feature was specified in this Spec.

Support path() and shape() in shape-outside

Adds support for the path() and shape() shape functions in the CSS shape-outside property. These functions allow developers to define the shape of `shape-outside` more flexibly and support animation. Demo: - https://codepen.io/una/full/ogzRBWV - https://codepen.io/yisi/full/EaNjzvR #

This feature was specified in this Spec.

Support rect() and xywh() in shape-outside

Adds support for the rect() and xywh() basic shape functions in the CSS shape-outside property. These functions allow developers to define float exclusion shapes using rectangle coordinates, aligning Chrome with Firefox and Safari which already support this feature. #

This feature was specified in this Spec.

User action pseudo class top layer boundary

This feature represents the behavior described in this section of the CSS spec: https://www.w3.org/TR/selectors-4/#useraction-pseudos which says that :hover, :active, and :focus-within match on the parents of elements, but only up to the first top layer element in the parent chain. The change for Chromium is that last "up to the top layer" part of this behavior. Concretely, this means that in the following structure if the user hovers the `<button>`, then the `:hover` pseudo class will match the `<button>` and the popover, but will not match the `<main>` element. ``` <main> <div popover> <button></button> </div> </main> <script>document.querySelector('[popover]').showPopover();</script> ``` The rationale behind this change is that typically top layer elements are rendered "elsewhere", in a location that is disconnected from the parent element visually. So it typically does not make sense to change the styles of the parent element when the top layer element is hovered or activated, for example. The customizable select implementation shipped in Chromium has this logic hard-coded for the specific case of the select `::picker()` popover. That special case logic is being removed in favor of the more general behavior with this feature. #

This feature was specified in this Spec.

Web app scope system accent color

Restricts access to the system accent color for CSS keywords and `accent-color: auto` to be only within a web app and initial profile context. AccentColor and AccentColorText CSS keywords, pose a significant fingerprinting vector when exposing the user's system colors widely on the web. As such, they're only available in installed web app contexts. Form controls with `accent-color: auto` also match this scope with this feature launch. This introduces more consistent developer and user expectations for system colors and aligns with fingerprinting restrictions for AccentColor[Text]. #

This feature was specified in this Spec.

image-rendering: crisp-edges

"image-rendering: crisp-edges" indicates that image should be scaled in a way that preserves contrast and edges, and which avoids smoothing colors or introducing blur to the image in the process Note: spec wise this is technically different than 'pixelated'. In actual implementations it is not. Spec wise 'pixelated' = use any process the UA wants to make the result look pixelated. nearest-neighbor is acceptable. 'crisp-edges' = use any process you want that preserves contrast, edges, and avoids blending colors, nearest-neighbor is acceptable. Firefox, Safari, and now Chrome treat both as synonyms and use nearest-neighbor. #

This feature was specified in this Spec.

Resources

Docs: https://www.w3.org/TR/css-images/#valdef-image-rendering-crisp-edgeshttps://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/image-rendering#crisp-edges

No linked samples

Origin Trials in-progress in 149

This release of Chrome had 4 new origin trials.

Gamepad Event-Driven Input API

This proposal extends the Gamepad API with a new event-driven model that enables applications to receive gamepad input with lower latency. Instead of relying on frequent polling via navigator.getGamepads(), developers can now listen for a rawgamepadinputchange event, which fires whenever new input data is available from the device. This allows for more responsive input handling, particularly in latency-sensitive applications. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://gabrielsanbrito.github.io/gamepad-raw-input-events

Permissions Policy: focus-without-user-activation

Gives embedders control over programmatic focus from embedded content via the focus-without-user-activation permissions policy. When the policy is denied for a frame, programmatic focus calls (element.focus(), autofocus, window.focus(), dialog.showModal(), and popover focusing) are blocked unless triggered by user activation. User-initiated focus such as clicking or tabbing is never affected. The policy can be set via a Permissions-Policy HTTP response header or the iframe allow attribute. Focus delegation is supported: a parent frame that has focus can programmatically pass focus to a child iframe, even if the child has the policy denied, and once a frame has focus it can move focus within its own subtree. #

This feature was specified in this Spec.

WebAssembly Custom Descriptors

Allows WebAssembly to store data associated with source-level types more efficiently in new "custom descriptor" objects. These custom descriptors can be configured with prototypes for the WebAssembly objects of that source-level type. This allows methods to be installed on a WebAssembly object's prototype chain and called directly from JS using normal method call syntax. The prototypes and methods can be configured declaratively using an imported builtin function. #

This feature was specified in this Spec.

WebMCP

WebMCP is a proposal for a web API that enables web pages to provide agent-specific paths in their UI. With WebMCP, agent-service interaction takes place via app-controlled UI, providing a shared context available to app, agent, and user. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1ZaQvuj4YnUnoqOfEhbfgFynpDRKk2zZZHavTNJ151gM/edit?tab=t.0#heading=h.ggi78l861caahttps://docs.google.com/document/d/1ycdzuXA-VE8lRDFSArh0Um3PChHV0Hq6Om1MSMG8qPE/edit?tab=t.0#heading=h.edohi3f5z12h

No linked samples

Flagged features in 149

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

Comma-separated Container Queries

Support multiple queries per @container rule. The @container rule applies if at least one of the queries matches. This makes it possible to have fallback queries for features which are not supported in all browsers, for instance. Example: @container --name1 not-supported(--foo: bar), --name2 (width > 600px) {} Along with the support for multiple queries, the object model is extended to support the 'conditions' attribute on the CSSContainerRule API. #

This feature was specified in this Spec.

IndexedDB: SQLite backend

Chromium's IndexedDB implementation is rewritten on top of SQLite, to replace the previous implementation that uses a hybrid of LevelDB and flat files. There is no change to the Web API. This is expected to improve reliability and, to a lesser extent, performance. For now this is applied to *new data stores*. This is step 2 of a multi-phase rollout. See https://chromestatus.com/feature/5126896685809664 which tracks step 1, the rollout for in-memory i.e. incognito contexts. Step 3 will consist of migrating existing data from LevelDB stores to SQLite stores. In this step, the first time a user visits a site, or after clearing site data, new IDB data will be stored in a backend that makes use of SQLite, but existing data stored in LevelDB is unimpacted. See Documentation link below for a list of differences to be aware of. #

This feature was specified in this Spec.

Resources

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

Samples: https://evanstade.github.io/web-storage-demos/idb-txn-scopes

Inline script cache

Caches compiled bytecode for inline scripts to reduce script compilation overhead and improve page load performance. This feature allows the browser to reuse compiled execution data for scripts embedded directly within HTML documents across different pages and sessions on the same site. Cache entries are keyed by a cryptographic hash (SHA256) of the script source and the document's network isolation key. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1pVFb79e5vkKJI7nZ15BXZFbNji_mB2Y8eZPGhEpK3jE/edit?tab=t.0#heading=h.lsbdweaff7ii

No linked samples

Overscroll Gestures

This feature adds a set of primitives to allow elements to anchor to overscroll areas of other elements. It further allows these elements to be revealed with swipe gestures, similar to scrollers. #

Resources

No linked docs

Samples: https://flackr.github.io/web-demos/html/overscrollcontainer

Platform-provided behaviors

This feature introduces "Platform-Provided Behaviors" to ElementInternals, allowing custom elements to adopt native behaviors without extending native elements or reimplementing complex logic. It modifies attachInternals to accept a list of behaviors, starting with HTMLSubmitButtonBehavior, which wires up form submission on activation. #

This feature was specified in this Spec.

Resources

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

Samples: https://microsoftedge.github.io/Demos/platform-provided-behaviors-for-custom-elements

Popover=hint behavior changes

This change implements a revised and simplified stacking model for the popover=hint attribute and its interactions with popover=auto. Previously, the interactions between these two types of popovers could be complex in some corner case situations (such as nesting auto popovers inside hint popovers), and could lead to unexpected behavior. Under the new model, opening a hint popover will no longer inadvertently close unrelated auto popovers. Hint popovers are now only hidden when their ancestral auto popover is hidden, or when a new, unrelated auto popover is opened. Additionally, developers can now safely nest an auto popover inside a hint popover; instead of throwing an exception or breaking the stack, the nested auto popover will gracefully "downgrade" and behave as a hint popover. This allows use cases such as placing a customizable-<select> within a popover=hint. To further improve predictability and prevent complex state mutations, we are also tightening the behavior around opening and closing popovers from within the beforetoggle event. There were guards in place for some, but not all, of the possible cases before. This change revamps the mechanism used to detect these cases, so that it should more reliably throw InvalidStateErrors for all such cases. This ensures that popover state management remains stable and prevents looping reentrancy bugs. All of these changes were motivated by standards conversations with Mozilla on the spec PR here: https://github.com/whatwg/html/pull/12345. #

This feature was specified in this Spec.

flex-wrap:balance

flex-wrap:balance allows developers to distribute content between flex-lines so that it appears more balanced (similar to text-wrap:balance). #

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 149

This release of Chrome had 0 features deprecated.

Removed features in 149

This release of Chrome had 0 features removed.