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 145

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

Enabled by default in 145

This release of Chrome had 30 new features.

Add presentationTime/paintTime to performance entries

Expose "paintTime" and "presentationTime" in element timing, LCP, long animation frames, and paint timing. "paintTime" means the time when the rendering phase ended and the browser started the paint phase. "presentationTime" means the time when the "pixels reached the screen", which is somewhat implementation-defined. This feature entry omits event timing, which would be done separately. #

This feature was specified in this Spec.

CSS letter-spacing and word-spacing: percentage values

Enables percentage values for the letter-spacing and word-spacing CSS property, as defined in the CSS Text Module Level 4 spec. Percentage values are calculated relative to the advance measure of the space character (U+0020). This gives developers more robust and flexible control over typography, particularly in responsive designs where text spacing needs to adapt to different viewports and font sizes. #

This feature was specified in this Spec.

Clipboardchange event - Sticky activation / Permission check

Require sticky user activation or clipboard-read permission to fire `clipboardchange` events, preventing unauthorized clipboard monitoring. This is as per the spec defined here - https://www.w3.org/TR/clipboard-apis/#clipboard-event-clipboardchange Reason for PSA - Clipboardchange event is relatively new (144) and this has minimal web facing change. It is expected that in most cases sticky activation / clipboard-read permission would already be present where clipboard monitoring is done (like remote desktop clients) #

This feature was specified in this Spec.

Column wrapping for multicol

Add support for the `column-wrap` and `column-height` CSS properties, from multicol Level 2. https://drafts.csswg.org/css-multicol-2/#cwr https://drafts.csswg.org/css-multicol-2/#ch This allows for vertical column layout, or even 2D column layout. Columns can have an explicit constrained height, apart from being derived from the content-box height of the multicol container, and wrap to a new row of columns when all columns have been filled for one row, rather than creating overflowing columns in the inline direction. #

This feature was specified in this Spec.

Cookie Store API `maxAge` attribute

Allows callers to specify a `maxAge` when setting a cookie with the Cookie Store API. Cookie expiry time is already configurable using the `expires` attribute, but `maxAge` provides a more idiomatic option and aligns the Cookie Store API with the options provided by `document.cookie` and the `Set-Cookie` HTTP Header. #

This feature was specified in this Spec.

Crash Reporting key-value API

A new key-value API, tentatively `window.crashReport`, backed by a per-Document map holding data that gets appended to crash reports. See https://github.com/WICG/crash-reporting/issues/15 for initial discussion. The data placed in this API's backing map gets sent in the `CrashReportBody` [1] if any renderer process crashes are incurred by the site. This lets developers debug what specific state in their application might be causing a given crash. [1]: https://wicg.github.io/crash-reporting/#crashreportbody #

This feature was specified in this Spec.

Customizable select listbox

This feature extends customizable select support to the listbox rendering mode, including single-select and multi-select in listbox mode. The listbox rendering mode means that the select element is rendered in-flow or in the page rather than with a separate button and popup. Listbox rendering mode is opted into across platforms via the multiple or size attributes, like <select multiple> or <select size=4>. When the appearance:base-select CSS property is applied to the select element with these attributes, it will now have improved rendering and input behavior. This feature does not support customizable select for the multi-select popup, which will come later. The following attributes must be set in order to get a multi-select popup: <select multiple size=1>. #

This feature was specified in this Spec.

Device Bound Session Credentials

To enhance user security and combat session cookie theft, Chrome is introducing [Device Bound Session Credentials (DBSC)](https://developer.chrome.com/docs/web-platform/device-bound-session-credentials). This feature allows websites to bind a user's session to their specific device, which makes it significantly more difficult for stolen session cookies to be used on other machines. #

This feature was specified in this Spec.

Enable monochrome emoji rendering in forced colors mode.

This change updates Chromium’s emoji rendering behavior in Forced Colors Mode. During computed-value resolution, emoji whose font-variant-emoji value computes to normal or unicode are rendered using their monochrome glyphs when available. Chromium will therefore suppress color emoji rendering, which ensures emojis fully participate in the Forced Colors Mode pipeline and respect system high-contrast colors. Behavior outside forced colors mode is unchanged. #

This feature was specified in this Spec.

Enabling Web Applications to understand bimodal performance timings

Web applications may suffer from bimodal distribution in page load performance due to factors outside of the application’s control. For example, when a user agent first launches in a "cold start" scenario, it must perform many expensive initialization tasks that compete for system resources. Browser extensions can also affect performance, since some extensions run additional code on every page you visit, increasing CPU usage and slowing response times. Likewise, when a machine is already busy with intensive tasks, web pages may load more slowly as a result. In these scenarios, content the web app attempts to load will be in competition with other work happening on the system. This makes it difficult to detect if performance issues exist within web applications themselves, or because of external factors. Teams we have worked with have been surprised at the difference between real-world dashboard metrics and what they observe in page profiling tools. Without more information, it is challenging for developers to understand if (and when) their applications may be misbehaving or are simply being loaded in a contended period. A new ‘confidence’ field on the PerformanceNavigationTiming object will enable developers to discern if the navigation timings are representative for their web application. #

This feature was specified in this Spec.

Resources

Docs: https://docs.google.com/document/d/1D6DqptsCEd3wPRsZ0q1iwVBAXXmhxZuLV-KKFI0ptCg/edit#heading=h.7nki9mck5t64

Samples: https://mwjacksonmsft.github.io/pwa/perfentry/index.html

Expose 'onanimationcancel' event to GlobalEventHandlers

The CSS Animations Level 1 extends [1] the GlobalEventsHandler Interface defined in the HTML spec [2], declaring 4 new event handlers: onanimationstart, onanimationiteration, onanimationend and onanimationcancel. Only the 'onanimationcancel' event handler has been missing from the GobalEventsHandler IDL. [1]https://drafts.csswg.org/css-animations/#interface-globaleventhandlers [2]https://html.spec.whatwg.org/multipage/webappapis.html#globaleventhandlers #

This feature was specified in this Spec.

Resources

Docs: https://developer.mozilla.org/en-US/docs/Web/API/Element/animationcancel_event

Samples: https://developer.mozilla.org/en-US/docs/Web/API/Element/animationcancel_event#examples

Expose rtpTimestamp from WebRTC video frames via VideoFrame.metadata()

Adds a VideoFrame.metadata() method that returns a dictionary containing the rtpTimestamp field, if the underlying VideoFrame has this field in its native metadata. An empty dictionary is returned otherwise. Only video frames originating from WebRTC sources will have the rtpTimestamp metadata attached. Additional metadata fields are already present in the native implementation and may be exposed to JavaScript over time, as outlined in the proposed spec: https://www.w3.org/TR/webcodecs-video-frame-metadata-registry/#dom-videoframemetadata

This feature was specified in this Spec.

Focus's focusVisible option

When calling the `focus()` method, developers can supply a `focusVisible` boolean in the FocusOptions dictionary. When true, a focus ring will always be painted around the newly-focused element and it will match the `:focus-visible` pseudo-class. When false, the focus ring will not be painted and `:focus-visible` will not match. When missing, the user agent make its own determination as to whether the focus ring should be painted, and the :focus-visible pseudo-class matches accordingly. #

This feature was specified in this Spec.

IndexedDB: SQLite backend (in-memory contexts)

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 only to in-memory contexts such as Incognito mode in Chromium and Google Chrome. This limits the impact of any new bugs, as well as puts off the need to worry about migration of existing data persisted to disk. #

This feature was specified in this Spec.

Resources

No linked docs

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

InputEvent types for deletion commands on non-collapsed selections

Reports accurate inputType values for deletion keyboard shortcuts on selected text. When deletion commands like Ctrl+Backspace or Ctrl+Delete are used with selected text in contenteditable elements, the beforeinput and input events now report deleteContentBackward or deleteContentForward instead of deleteWordBackward or deleteWordForward. This enables web developers to correctly understand what editing operation occurred and implement reliable undo/redo or custom editing behaviors. #

This feature was specified in this Spec.

Local Network Access split permissions

This is an enhancement to the Local Network Access(LNA) restrictions, where we split the permission required from one Local Network Access permission, into 2 separate permissions. Old permission: local-network-access New Permissions: local-network (for LNA requests to IPs in the local address space) loopback-network (for LNA requests to IPs in the loopback address space) The old permission is kept as an alias and should continue to work for permissions.query and Permissions Policy. Current enterprise policies will continue to work the same; newer more granular enterprise policies will be added at a later point in time. See https://chromestatus.com/feature/5152728072060928 for an overview of LNA. #

Navigation API: expose destination in navigation.transition

Currently NavigationTransition has a "from" property, exposing the old URL of the navigation. Exposing "to" (a NavigationDestination) completes this. It is especially useful when using precommit handlers, as during precommit the current URL has not yet switched to the destination. Note that navigation.transition is only exposed for intercepted navigations - which means same-origin document-initiated navigations. #

This feature was specified in this Spec.

Overscroll effect on non-root scrollers

Shows elastic overscroll effects on non-root scroll containers. When a nested scrollable element reaches its scroll boundary, the overscroll affordance applies to that element instead of only the root scroller. This reduces the need for custom Javascript workarounds and can be controlled per element with overscroll-behavior. #

This feature was specified in this Spec.

Reduced User-Agent strings by default

Starting in Chrome 145, we will remove the **UserAgentReduction** policy. This policy was previously available to control whether Chrome sent a reduced or full User-Agent string. To enhance user privacy and reduce passive tracking capabilities, Chrome began reducing the information contained in the User-Agent header by default in Chrome version 110. The **UserAgentReduction** policy was provided as a temporary measure for enterprises to manage this transition. The recommended mechanism for websites to access browser and device information is now User-Agent Client Hints (UA-CH). UA-CH requires websites to actively request specific information, which is a more privacy-preserving approach than the legacy User-Agent string. For more details, see this article on web.dev, [Migrate to User-Agent Client Hints](https://web.dev/articles/migrate-to-ua-ch). From Chrome 145 onwards, the **UserAgentReduction** policy will have no effect. Chrome will send a reduced User-Agent string by default. Systems or applications that relied on this policy to receive the full (legacy) User-Agent string may no longer receive the detailed information they expect.

Refine border-radius shadow edge computation for high border-radius

This improvement ensures that shadows and clip boundaries on near-circular elements (where border-radius is close to 50%) precisely match the visual contour of the curved edge. This produces a more consistent rendering of complex rounded shapes, eliminating visual discrepancies for high radius values. The border-radius adjustment factor, which ensures corners appear sharp for small radii, is now progressively dampened as the radius value approaches 50%. This also applies to non-round contours (using corner-shape), which now use the same radius adjustment mechanism. #

This feature was specified in this Spec.

Secure Payment Confirmation: Browser Bound Keys

Adds an additional cryptographic signature over Secure Payment Confirmation assertions and credential creation. The corresponding private key is not synced across devices. This helps web developers meet requirements for device binding for payment transactions. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/w3c/secure-payment-confirmation/issues/271https://github.com/w3c/secure-payment-confirmation/pull/286https://github.com/w3c/secure-payment-confirmation/pull/296

Samples: https://rsolomakhin.github.io/pr/spc-sync

Secure Payment Confirmation: UX Refresh

Updates the UX elements for the SPC dialog on Android Chrome. Other than just UX presentation the following are being added: - Allowing merchants to provide an optional list of payment entity logos related to the payment that will be displayed in the UX (https://github.com/w3c/secure-payment-confirmation/pull/294). - Returning different output states back to the merchant depending on whether the user wants to continue the transaction without SPC or to cancel the transaction (https://github.com/w3c/secure-payment-confirmation/pull/292). Currently, we only send a single output state back for both cases. - A new payment detail label field will be added to the payment instrument so the text be presented across 2 lines in SPC (https://github.com/w3c/secure-payment-confirmation/pull/298) #

This feature was specified in this Spec.

Resources

Docs: https://github.com/w3c/secure-payment-confirmation/issues/197https://github.com/w3c/secure-payment-confirmation/issues/275https://github.com/w3c/secure-payment-confirmation/pull/292https://github.com/w3c/secure-payment-confirmation/pull/294https://github.com/w3c/secure-payment-confirmation/pull/298

Samples: https://rsolomakhin.github.io/pr/spc-payment-entities-logoshttps://rsolomakhin.github.io/pr/spc-opt-out

Show true window position on Android

Chrome on Android accurately reports the browser window's position and size using window.screenX, window.screenY, window.outerWidth, and window.outerHeight. Previously Chrome incorrectly assumed all browser windows on Android start at coordinates (0, 0). This is inaccurate for Android tablets using freeform windowing mode, causing websites to always receive 0 when querying the window's on-screen position using window.screenX and window.screenY (these fields store the coordinates of window's top-left corner in global work area coordinate space). Moreover, Chrome on Android incorrectly assumed that outer dimensions of the browser window are equal to the inner dimensions of the website viewport. Remark: window.screenX and window.screenY have aliases, window.screenLeft and window.screenTop. #

This feature was specified in this Spec.

TCP Socket Pool Limit Randomization

By exploiting limits in the connection pool size on Chrome, knowledge can be gained about cross-site state which would otherwise be inaccessible. Specifically, it’s possible (with some statistical certainty) to evaluate the login state, visited history, or even something more specific like whether gmail has pending messages in the inbox. To mitigate this we are adding randomization to the way that TCP socket pools are limited so that an observing site cannot infer this information with high certainty. #

Trusted Types spec alignment

Trusted Types (https://developer.mozilla.org/en-US/docs/Web/API/Trusted_Types_API) was originally implemented and launched in Chromium in 2019, and has since found use in numerous websites. It has recently gained interest from other browser vendors. The Trusted Type spec was co-written as a "monkey patch" spec along with our original implementation. It now receives fresh attention as others are trying to implement the same spec. It has now been "upstreamed" into HTML + DOM (plus a bit of CSP). As part of that process, various inconsistencies are being identified and fixed. Some of these fixes may be developer observable. This intent is to update our implementation to match the spec, as it's upstreamed into HTML. Meanwhile, WebKit has launched their implementation of the updated Trusted Types spec, which gives us high confidence that this update is highly web compatible. #

This feature was specified in this Spec.

Upsert

ECMAScript proposal for Map.prototype.getOrInsert, Map.prototype.getOrInsertComputed, WeakMap.prototype.getOrInsert, and WeakMap.prototype.getOrInsertComputed. #

This feature was specified in this Spec.

Use of CssPixels in LayoutShift API

This feature changes the attribution data (`prevRect` and `currentRect`) in the [LayoutShift API](https://wicg.github.io/layout-instability/) to be reported in CSS pixels instead of physical pixels. The current behavior is inconsistent with other layout-related APIs, which all use CSS pixels. This change improves consistency, simplifies usage for developers, and aligns with expected units in debugging and tooling. #

This feature was specified in this Spec.

Resources

No linked docs

Samples: https://wpt.fyi/results/layout-instability/attribution-rectangles-css-pixels.html?label=experimental&label=master&aligned

WebGPU: `subgroup_uniformity` feature

Functionality added to the WebGPU spec after its first shipment in a browser. Adds a new scope to the uniformity analysis and changes which parts of the language are checked in each to allow subgroup functionality to be considered uniform in more cases. #

This feature was specified in this Spec.

WebRequest.SecurityInfo in Controlled Frame

This feature introduces a WebRequest.SecurityInfo API for [ControlledFrame](https://developer.chrome.com/docs/iwa/controlled-frame). It allows a web app to intercept an HTTPS, WSS, or WebTransport request to a server, retrieve the server's certificate fingerprint (as verified by the browser), and then use that fingerprint to manually verify the certificate of a separate raw TCP/UDP connection to the same server. This provides a simple way for the app to confirm it's communicating with the correct server. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/explainers-by-googlers/security-info-web-request

No linked samples

`text-justify` CSS property

Support of `text-justify` CSS property Web authors can control how text is justified when `text-align: justify` is applied by using the `text-justify` property. For example, they can force justification by expanding inter-character space even in English text. #

This feature was specified in this Spec.

Origin Trials in-progress in 145

This release of Chrome had 2 new origin trials.

JPEG XL decoding support (image/jxl) in blink

Adds support for decoding JPEG XL (image/jxl) images in Blink using jxl-rs, a memory-safe pure Rust decoder. JPEG XL is a modern image format standardized as ISO/IEC 18181 that offers: - Progressive decoding for improved perceived loading performance - Support for wide color gamut, HDR, and high bit depth - Animation support This implementation uses jxl-rs (https://github.com/libjxl/jxl-rs) instead of the C++ libjxl reference decoder to meet Chromium's memory safety requirements. The decoder is gated behind the enable-jxl-image-format flag and enable_jxl_decoder build flag. CL: https://chromium-review.googlesource.com/c/chromium/src/+/7184969

WebAudio: Configurable render quantum

AudioContext and OfflineAudioContext now take an optional renderSizeHint, which allows users to ask for a particular render quantum size when an integer is passed, to use the default of 128 frames if nothing or "default" is passed, or to ask the User-Agent to pick a good render quantum size if "hardware" is specified. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/WebAudio/web-audio-api/blob/main/explainer/user-selectable-render-size.md

No linked samples

Flagged features in 145

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

CSS Name-only Container Queries

A CSS query container can be queried based on its container-name only, and the container does not need any container-type set: <style> #container { container-name: --foo; } @container --foo { input { background-color: green; } } <style> <div id="container"> <div><input></div> </div> Previously, @container required some query in addition to the name. #

This feature was specified in this Spec.

Container Timing

The Container Timing API enables monitoring when annotated sections of the DOM are displayed on screen and have finished their initial paint. A developer will have the ability to mark subsections of the DOM with the containertiming attribute (similar to elementtiming for the Element Timing API) and receive performance entries when that section has been painted for the first time. This API will allow developers to measure the timing of various components in their pages. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/WICG/container-timing

Samples: https://github.com/WICG/container-timing/tree/main/examples/adding-contenthttps://github.com/WICG/container-timing/tree/main/examples/shadow-domhttps://github.com/WICG/container-timing/tree/main/examples/skeleton-layouthttps://github.com/WICG/container-timing/tree/main/examples/svghttps://github.com/WICG/container-timing/tree/main/examples/table

WebAudio: Configurable render quantum

AudioContext and OfflineAudioContext now take an optional renderSizeHint, which allows users to ask for a particular render quantum size when an integer is passed, to use the default of 128 frames if nothing or "default" is passed, or to ask the User-Agent to pick a good render quantum size if "hardware" is specified. #

This feature was specified in this Spec.

Resources

Docs: https://github.com/WebAudio/web-audio-api/blob/main/explainer/user-selectable-render-size.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 145

This release of Chrome had 2 features deprecated.

Chrome removes support for obsolete virtual cameras on macOS

As early as Chrome 145, Chrome will remove support for obsolete virtual cameras for all macOS releases that it supports. On macOS, modern virtual cameras are built using the [Core Media IO](https://developer.apple.com/documentation/coremediaio) framework, which has been available since macOS 12.3. Apple has performed outreach, and all modern virtual camera software has been migrated to use this [Core Media IO framework](https://developer.apple.com/videos/play/wwdc2022/10022/). Obsolete virtual cameras, built as DAL plugins, have been blocked by macOS itself starting with macOS 14.1 (2023), and have been unsupported in Safari since 2018, if not earlier. Chrome will remove support for obsolete virtual cameras for all macOS releases that it supports. This allows Chrome to improve security by fully disallowing loading of third-party libraries into Chrome processes. #

Remove BMP Extension for Embedding JPEG-or-PNG-in-BMP

Chrome will remove BMP extension for embedding JPEG-or-PNG-in-BMP for the following reasons: Security ======== We have compelling evidence that surprising and rarely-used support for nesting formats is a path to security bugs. Such a possibility is especially worrying for BMP, which is otherwise considered a pretty simple format. Interoperability ================ * Today only Chrome supports this BMP extension. (Tested with Chrome 141.0.7390.134, Firefox 143.0.4 and 144.0.2, Safari 18.6) * There is no official spec. * Mozilla Developer Network advises against using BMP in general, and this BMP extension specifically (calling it only “theoretically supported”) No usage ======== No usage has been registered via UMA data (see https://crbug.com/452667935). Not just minimal usage, but no usage whatsoever. Viable alternatives =================== If our research data missed an existing usage of JPEG-or-PNG-embedded-in-BMP then we kindly ask web developers to use PNG and/or JPEG images **directly** rather than embedding them inside a BMP format. #

Removed features in 145

This release of Chrome had 0 features removed.