Google Chrome Release Notes
Last updated: Mar 18, 2026
- Mar 10, 2026
- Date parsed from source:Mar 10, 2026
- First seen by Releasebot:Mar 18, 2026
Chrome 146 Bookmark collections drop down LLM Tools
Google Chrome releases Chrome 146 stable, introducing scroll-triggered CSS animations, root font scaling aligned to OS and browser text size, scoped custom element registries, and assorted WebGPU, JavaScript and performance improvements for Android, ChromeOS, Linux, macOS, and Windows.
Chrome 146
Stable release date:
March 10th, 2026Unless otherwise noted, the following changes apply to Chrome 146 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
Want just the highlights? Check out
New in Chrome 146
.CSS and UI
Scroll-triggered animations
This feature adds scroll-position-based control of animations, for example, playing, pausing, and resetting animations.
A common pattern on pages across the web is to start an animation when a scroll position is reached. Developers often do this by using JavaScript to manually detect that an element is within its scroll container's viewport and to start a corresponding animation (for example, sliding that element into view). Many of these use cases rely on declaratively provided information. This feature lets you create such interactions declaratively with CSS, which lets the user agent offload this interaction to a worker thread. The API also includes JavaScript interfaces that let you extend the feature to web animations in addition to CSS animations.
Tracking bug #390314945 | ChromeStatus.com entry | Spec
The trigger-scope property
The trigger-scope propertyThe trigger-scope property lets you limit the names of
animation triggers
declared by
trigger-instantiating properties
.Trigger-instantiating properties, for example,
timeline-trigger
, declare names that the
animation-trigger
property can reference to attach animations to triggers. However, these names are global by default (similar to
anchor-name
), and it is often useful to limit the visibility of the names to isolate animation-to-trigger interactions.Tracking bug #466134208 | ChromeStatus.com entry | Spec
meta name="text-scale"
meta name="text-scale"
The
root element
's default font size scales in proportion to both the operating system's and browser's text scale setting. This lets pages that follow best practices around
font-relative units
(that is, use
rem
and
em
for font sizes and page elements that adapt to user text size preferences) respect the user's OS-level text scale setting. This also disables existing browser-based mechanisms (that is, full-page zoom on windows) and heuristics (that is, text autosizing on mobile). You can signal to the browser that the page is constructed in a way (that is, with
rem
and
em
) that scales well across various user-selected font size preferences. Similar to
env(preferred-text-scale)
, which provides a way to access the text scale, this API extends this by enabling scaling using the
root element
's default font size and opting out of automatic text scaling.Tracking bug #430566925 | ChromeStatus.com entry | Spec
Scoped custom element registry
This feature lets multiple custom element definitions for a single tag name exist within a page. This prevents custom element name conflicts when a web app uses libraries from multiple sources. This is achieved by allowing user code to create multiple custom element registries and associate them with tree scopes and elements that function as scoping objects.
Tracking bug #40826514 | ChromeStatus.com entry | Spec
Capabilities
Populate targetURL during file handling
Populate
targetURL
during file handlingThe Launch Handler implementation now ensures
LaunchParams.targetURL
is populated when a PWA is launched with file handling. Before this change, the property was null when a file launch was directed to an existing window. This change ensures that the URL from the manifest
action
field (the same URL the document must currently load) is available to the
launchQueue
consumer.Tracking bug #464314997 | ChromeStatus.com entry | Spec
Stop re-queueing LaunchParams on reload
Prevent the
launchQueue
from re-sending the last
LaunchParams
(including file handles) when a user reloads the page. Previously, a page refresh triggered the launch consumer again with the data from the original launch. This change ensures that a reload is treated as a standard navigation rather than a "re-launch," and the
launchQueue
won't be populated with duplicate files unless a new file launch event occurs.Tracking bug #40204185 | ChromeStatus.com entry
DOM
Navigation API: add post-commit handler from precommit
Navigation API: add
post-commit handler
from
precommitWhen intercepting navigations with the
navigate
event,
precommitHandlers
and post-commit ordinary handlers are passed separately.This works well when there is only one or the other, but can be cumbersome when the flow includes a
precommitHandler
that leads to a
post-commit handler
.This addition is a small ergonomic improvement that lets you register a post-commit handler while invoking a precommit handler.
Tracking bug #465487215 | ChromeStatus.com entry | Spec
Graphics
WebGPU: Texture and Sampler Lets
Add a language feature to WGSL,
texture_and_sampler_let
, that lets you store
texture
and
sampler
objects into a
let
declaration in WGSL.Tracking bug #459500757 | ChromeStatus.com entry | Spec
WebGPU: Transient attachments
This feature adds functionality to the WebGPU spec after its first shipment in a browser.
A new
TRANSIENT_ATTACHMENT GPUTextureUsage
lets you create attachments that let render pass operations stay in tile memory, avoiding VRAM traffic and potentially avoiding VRAM allocation for the textures.Tracking bug #462620664 | ChromeStatus.com entry | Spec
WebGPU Compatibility mode
This mode adds an opt-in, lightly restricted subset of the WebGPU API that can run older graphics APIs, for example,
OpenGL
and
Direct3D11
. By opting into this mode and obeying its constraints, you can extend the reach of your
code
WebGPU
applications to many older devices that don't have the modern, explicit graphics APIs that core WebGPU requires. For simple applications, the only required change is to specify the
featureLevel
when calling
requestAdapter
. For more advanced applications, some modifications might be necessary to accommodate the mode's restrictions. Since Compatibility mode is a subset, the resulting applications are also valid WebGPU Core applications and run even on user agents that don't support Compatibility mode.Tracking bug #442618060 | ChromeStatus.com entry | Spec
JavaScript
Iterator sequencing
A TC39 proposal to create
iterators
by sequencing existing
iterators
. This introduces
Iterator.concat
(
...items
).Tracking bug #434977727 | ChromeStatus.com entry | Spec
Selective permissions intervention
When you grant a website permission to access a powerful API (for example,
Bluetooth
,
Camera
,
Clipboard
,
DisplayCapture
,
Geolocation
,
Microphone
,
Serial
, and
USB
), your consent is intended for the site, not necessarily for every third-party script running on the page. In particular, embedded ad scripts running in the main frame or same-origin iframes can use the page's permission to opportunistically access this sensitive data. You might not be aware that an advertisement is accessing your information.This intervention aims to better align a granted permission with your intent by preventing ad script in a context with API permission from using it, reinforcing your trust and control over your data.
Tracking bug #435214052 | ChromeStatus.com entry | Spec
Preserve dropEffect values from dragover to drop Events
Preserve
dropEffect
values from
dragover
to
drop
EventsThe
HTML5 Drag and Drop API
lets web applications handle drag-and-drop operations through a series of events:
dragstart , dragenter , dragover , dragleave , drop , and dragend . During these events, the
dataTransfer.dropEffect
property indicates which operation (
copy , move , link , or none ) should be performed.According to the
HTML5 specification
, the
dropEffect
value set by web applications during the last
dragover
event should be preserved and available in the subsequent
drop
event.However, Chromium-based browsers were overwriting the web application's
dropEffect
value with the browser's own negotiated operation before the
drop
event fired, breaking specification compliance and limiting your control over drag-and-drop behavior. This behavior has now been changed.Tracking bug #40068941 | ChromeStatus.com entry | Spec
Multimedia
Playback Statistics API for WebAudio
This feature adds an
AudioContext.playbackStats
attribute which returns an
AudioPlaybackStats
object. This object provides audio playback statistics, for example,
average latency , minimum/maximum latency , underrun duration , and underrun count . This API lets web applications monitor audio playback quality and detect glitches.Note: This feature was tracked as
AudioContext.playoutStats
. It has been renamed to
AudioContext.playbackStats
to align with the final Web Audio API specification. The old name is supported as a deprecated alias for backward compatibility.Tracking bug #475838360 | ChromeStatus.com entry | Spec
Network
Data URL MIME Type Parameter Preservation
Preserve
MIME type parameters
(for example,
charset , boundary ) in data URL
Content-Type
headers as specified in the
Fetch Standard
.Tracking bug #40487194 | ChromeStatus.com entry | Spec
Performance
LCP: Match specced behavior for emitting candidates
The
LCP
algorithm now emits candidates based on the largest painted image instead of the largest pending-but-not-yet-painted image. This might cause more intermediate candidates to be emitted to the performance timeline.In each animation frame, after it has been presented, the LCP algorithm emits a new candidate (at most one) to the performance timeline if there is a new largest text or image that was painted in that frame. The algorithm also tracks the "largest pending image", which is the largest still-loading image, and uses that image's size to determine whether the new candidate is largest. This means a slow loading large image can prevent emission of intermediate LCP candidates, and these candidates often provide useful information for you to understand the loading progression.
This behavior emerged during Interop 2025 as a difference with other engines, and the team agreed to align to emit at most one candidate per frame based on the set of painted image and text elements for that frame.
Tracking bug #482261053 | ChromeStatus.com entry | Spec
Security
Sanitizer API
The Sanitizer API offers a way to remove content that might execute script from arbitrary, user-supplied HTML content. The goal is to make it easier to build XSS-free web applications.
Tracking bug #40138584 | ChromeStatus.com entry | Spec
Origin trials
WebNN
WebNN lets web applications and frameworks take advantage of native operating system services for machine learning and the underlying hardware capabilities available on your computer to implement consistent, efficient, and reliable ML experiences on the web.
Origin Trial | Tracking bug #40206287 | ChromeStatus.com entry | Spec
CPU Performance API
This API exposes information about your device's power. This API targets web applications that use this information to provide an improved user experience, possibly in combination with the Compute Pressure API, which provides information about the device's CPU pressure or utilization and lets applications react to changes in CPU pressure.
Tracking bug #449760252 | ChromeStatus.com entry | Spec
Speculation rules: form_submission field
Speculation rules:
form_submission
fieldThis extends
speculation rules
syntax, letting you specify the
form_submission
field for
prerender
.This field directs the browser to prepare the
prerender
as a form submission, so it can be activated by real form submission navigations. For example, a simple search form results in a
/search?q=XXX
GET request navigation; web developers have requested support for this.Tracking bug #346555939 | ChromeStatus.com entry | Spec
Focusgroup
The Focusgroup feature facilitates keyboard focus navigation among a set of focusable elements by using the keyboard arrow keys.
Learn more about focusgroup in
Request for developer feedback: focusgroup
.Origin Trial | Tracking bug #1286127 | ChromeStatus.com entry | Spec
Except as otherwise noted, the content of this page is licensed under the
Creative Commons Attribution 4.0 License
, and code samples are licensed under the
Apache 2.0 License
. For details, see the
Google Developers Site Policies
. Java is a registered trademark of Oracle and/or its affiliates.Last updated 2026-03-10 UTC.
Original source Report a problem - Mar 10, 2026
- Date parsed from source:Mar 10, 2026
- First seen by Releasebot:Mar 18, 2026
What's new in Dev Tools (Chrome 146)
Google Chrome releases Chrome 146, delivering improved Adopted Style Sheets support in Elements, faster Console history, and streamlined privacy debugging, plus small fixes. DevTools MCP server now at 0.19.0 with Lighthouse audits, slim mode, new debugging skills, and expanded tooling. Console edits preserved; Privacy panel renamed to Security and UI polishing across accessibility.
Chrome 146 brings improved support for Adopted Style Sheets in the Elements panel, significantly improves Console history navigation, and streamlines the Privacy debugging workflow, together with various other small fixes and updates.
Dev Tools MCP server updates
The DevTools MCP server is now at version 0.19.0, bringing powerful new tools, efficiency improvements, and specialized debugging skills:
- Integrated Lighthouse audits: You can now run Lighthouse audits directly through MCP, enabling automated performance and quality checks within your agentic workflows.
- Slim Mode: A new --slim mode is now available, designed to optimize tool descriptions and parameters for maximum token savings.
- New Debugging Skills: Added dedicated skills specifically for auditing and debugging accessibility, as well as debugging and optimizing Largest Contentful Paint (LCP).
- Expanded Tooling and Capabilities: The server now supports storage-isolated browser contexts, experimental screencast recording, a new take_memory_snapshot tool, and advanced interaction capabilities like type_text.
See the public changelog on GitHub for the full list of changes.
Preserve Console history edits
A long-standing friction point in the Console has been resolved. Previously, if you were editing a command pulled from history and navigated away (by pressing Up or Down), your edits were lost.
In Chrome 146, DevTools now preserves your edits as you navigate through your command history. You can start modifying a previous command, browse for another one, and return to your draft without losing your work.
This was a community contribution, thanks to @hjanuschka!
Chromium issue: 355108929
Improved support for Adopted Style Sheets
Debugging Web Components and modern CSS architectures is now much easier. Adopted Style Sheets are no longer hidden away; they are now grouped under a dedicated #adopted-style-sheets node within the DOM tree in the Elements panel.
You can inspect these sheets just like standard
Original source Report a problem All of your release notes in one feed
Join Releasebot and get updates from Google and hundreds of other software products.
- Mar 10, 2026
- Date parsed from source:Mar 10, 2026
- First seen by Releasebot:Mar 11, 2026
What's new in Dev Tools (Chrome 146)
Google releases Chrome 146 DevTools with better Adopted Style Sheets in Elements, preserved console history edits, and streamlined privacy debugging plus assorted fixes. MCP server 0.19.0 adds Lighthouse audits, slim mode, new debugging skills, isolated contexts, screencast, take_memory_snapshot. Accessibility and UI polish.
Chrome 146 brings improved support for Adopted Style Sheets in the Elements panel, significantly improves Console history navigation, and streamlines the Privacy debugging workflow, together with various other small fixes and updates.
Dev Tools MCP server updates
The DevTools MCP server is now at version 0.19.0, bringing powerful new tools, efficiency improvements, and specialized debugging skills:
- Integrated Lighthouse audits: You can now run Lighthouse audits directly through MCP, enabling automated performance and quality checks within your agentic workflows.
- Slim Mode: A new --slim mode is now available, designed to optimize tool descriptions and parameters for maximum token savings.
- New Debugging Skills: Added dedicated skills specifically for auditing and debugging accessibility, as well as debugging and optimizing Largest Contentful Paint (LCP).
- Expanded Tooling and Capabilities: The server now supports storage-isolated browser contexts, experimental screencast recording, a new take_memory_snapshot tool, and advanced interaction capabilities like type_text.
See the public changelog on GitHub for the full list of changes.
Preserve Console history edits
A long-standing friction point in the Console has been resolved. Previously, if you were editing a command pulled from history and navigated away (by pressing Up or Down), your edits were lost.
In Chrome 146, DevTools now preserves your edits as you navigate through your command history. You can start modifying a previous command, browse for another one, and return to your draft without losing your work.
This was a community contribution, thanks to @hjanuschka!
Chromium issue: 355108929
Improved support for Adopted Style Sheets
Debugging Web Components and modern CSS architectures is now much easier. Adopted Style Sheets are no longer hidden away; they are now grouped under a dedicated #adopted-style-sheets node within the DOM tree in the Elements panel.
You can inspect these sheets just like standard
Original source Report a problem - Mar 10, 2026
- Date parsed from source:Mar 10, 2026
- First seen by Releasebot:Mar 11, 2026
Chrome 146 Bookmark collections drop down LLM Tools
Google launches Chrome 146 stable with declarative CSS scroll animations, scoped animation triggers, text-scale aware root font, and multiple WebGPU and tooling refinements across Android, ChromeOS, Linux, macOS, and Windows.
Chrome 146
Stable release date:
March 10th, 2026Unless otherwise noted, the following changes apply to Chrome 146 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
Want just the highlights? Check out
New in Chrome 146
.CSS and UI
Scroll-triggered animationsThis feature adds scroll-position-based control of animations, for example, playing, pausing, and resetting animations.
A common pattern on pages across the web is to start an animation when a scroll position is reached. Developers often do this by using JavaScript to manually detect that an element is within its scroll container's viewport and to start a corresponding animation (for example, sliding that element into view). Many of these use cases rely on declaratively provided information. This feature lets you create such interactions declaratively with CSS, which lets the user agent offload this interaction to a worker thread. The API also includes JavaScript interfaces that let you extend the feature to web animations in addition to CSS animations.
Tracking bug #390314945 | ChromeStatus.com entry | Spec
The trigger-scope propertyThe trigger-scope property
The trigger-scope property lets you limit the names of
animation triggers
declared by
trigger-instantiating properties
.Trigger-instantiating properties , for example,
timeline-trigger , declare names that the
animation-trigger
property can reference to attach animations to triggers. However, these names are global by default (similar to
anchor-name
), and it is often useful to limit the visibility of the names to isolate animation-to-trigger interactions.Tracking bug #466134208 | ChromeStatus.com entry | Spec
meta name="text-scale"meta name="text-scale"
The
root element
's default font size scales in proportion to both the operating system's and browser's text scale setting. This lets pages that follow best practices around
font-relative units
(that is, use
rem
and
em
for font sizes and page elements that adapt to user text size preferences) respect the user's OS-level text scale setting. This also disables existing browser-based mechanisms (that is, full-page zoom on windows) and heuristics (that is, text autosizing on mobile). You can signal to the browser that the page is constructed in a way (that is, with
rem
and
em
) that scales well across various user-selected font size preferences. Similar to
env(preferred-text-scale)
, which provides a way to access the text scale, this API extends this by enabling scaling using the
root element
's default font size and opting out of automatic text scaling.Tracking bug #430566925 | ChromeStatus.com entry | Spec
Scoped custom element registryThis feature lets multiple custom element definitions for a single tag name exist within a page. This prevents custom element name conflicts when a web app uses libraries from multiple sources. This is achieved by allowing user code to create multiple custom element registries and associate them with tree scopes and elements that function as scoping objects.
Tracking bug #40826514 | ChromeStatus.com entry | Spec
Capabilities
Populate targetURL during file handlingPopulate
targetURL
during file handlingThe Launch Handler implementation now ensures
LaunchParams.targetURL
is populated when a PWA is launched with file handling. Before this change, the property was null when a file launch was directed to an existing window. This change ensures that the URL from the manifest
action
field (the same URL the document must currently load) is available to the
launchQueue
consumer.Tracking bug #464314997 | ChromeStatus.com entry | Spec
Stop re-queueing LaunchParams on reloadPrevent the
launchQueue
from re-sending the last
LaunchParams
(including file handles) when a user reloads the page. Previously, a page refresh triggered the launch consumer again with the data from the original launch. This change ensures that a reload is treated as a standard navigation rather than a "re-launch," and the
launchQueue
won't be populated with duplicate files unless a new file launch event occurs.Tracking bug #40204185 | ChromeStatus.com entry
DOM
Navigation API: add post-commit handler from precommitNavigation API: add
post-commit handler
from
precommitWhen intercepting navigations with the
navigate
event,
precommitHandlers
and post-commit ordinary handlers are passed separately.This works well when there is only one or the other, but can be cumbersome when the flow includes a
precommitHandler
that leads to a
post-commit handler
.This addition is a small ergonomic improvement that lets you register a post-commit handler while invoking a precommit handler.
Tracking bug #465487215 | ChromeStatus.com entry | Spec
Graphics
WebGPU: Texture and Sampler LetsAdd a language feature to WGSL,
texture_and_sampler_let
, that lets you store
texture
and
sampler
objects into a
let
declaration in WGSL.Tracking bug #459500757 | ChromeStatus.com entry | Spec
WebGPU: Transient attachmentsThis feature adds functionality to the WebGPU spec after its first shipment in a browser.
A new
TRANSIENT_ATTACHMENT GPUTextureUsage
lets you create attachments that let render pass operations stay in tile memory, avoiding VRAM traffic and potentially avoiding VRAM allocation for the textures.Tracking bug #462620664 | ChromeStatus.com entry | Spec
WebGPU Compatibility modeThis mode adds an opt-in, lightly restricted subset of the WebGPU API that can run older graphics APIs, for example,
OpenGL
and
Direct3D11
. By opting into this mode and obeying its constraints, you can extend the reach of your
WebGPU
applications to many older devices that don't have the modern, explicit graphics APIs that core WebGPU requires. For simple applications, the only required change is to specify the
featureLevel
when calling
requestAdapter
. For more advanced applications, some modifications might be necessary to accommodate the mode's restrictions. Since Compatibility mode is a subset, the resulting applications are also valid WebGPU Core applications and run even on user agents that don't support Compatibility mode.Tracking bug #442618060 | ChromeStatus.com entry | Spec
JavaScript
Iterator sequencingA TC39 proposal to create
iterators
by sequencing existing
iterators
. This introduces
Iterator.concat
(...items).Tracking bug #434977727 | ChromeStatus.com entry | Spec
Selective permissions interventionWhen you grant a website permission to access a powerful API (for example,
Bluetooth , Camera , Clipboard , DisplayCapture , Geolocation , Microphone , Serial , and USB ), your consent is intended for the site, not necessarily for every third-party script running on the page. In particular, embedded ad scripts running in the main frame or same-origin iframes can use the page's permission to opportunistically access this sensitive data. You might not be aware that an advertisement is accessing your information.This intervention aims to better align a granted permission with your intent by preventing ad script in a context with API permission from using it, reinforcing your trust and control over your data.
Tracking bug #435214052 | ChromeStatus.com entry | Spec
Preserve dropEffect values from dragover to drop EventsPreserve
dropEffect
values from
dragover
to
drop
EventsThe
HTML5 Drag and Drop API
lets web applications handle drag-and-drop operations through a series of events:
dragstart , dragenter , dragover , dragleave , drop , and dragend . During these events, the
dataTransfer.dropEffect
property indicates which operation (
copy , move , link , or none ) should be performed.According to the
HTML5 specification
, the
dropEffect
value set by web applications during the last
dragover
event should be preserved and available in the subsequent
drop
event.However, Chromium-based browsers were overwriting the web application's
dropEffect
value with the browser's own negotiated operation before the
drop
event fired, breaking specification compliance and limiting your control over drag-and-drop behavior. This behavior has now been changed.Tracking bug #40068941 | ChromeStatus.com entry | Spec
Multimedia
Playback Statistics API for WebAudioThis feature adds an
AudioContext.playbackStats
attribute which returns an
AudioPlaybackStats
object. This object provides audio playback statistics, for example,
average latency , minimum/maximum latency , underrun duration , and underrun count . This API lets web applications monitor audio playback quality and detect glitches.Note:
This feature was tracked as
AudioContext.playoutStats
. It has been renamed to
AudioContext.playbackStats
to align with the final Web Audio API specification. The old name is supported as a deprecated alias for backward compatibility.Tracking bug #475838360 | ChromeStatus.com entry | Spec
Network
Data URL MIME Type Parameter PreservationPreserve
MIME type parameters
(for example,
charset , boundary ) in data URL
Content-Type
headers as specified in the
Fetch Standard
.Tracking bug #40487194 | ChromeStatus.com entry | Spec
Performance
LCP: Match specced behavior for emitting candidatesThe
LCP
algorithm now emits candidates based on the largest painted image instead of the largest pending-but-not-yet-painted image. This might cause more intermediate candidates to be emitted to the performance timeline.In each animation frame, after it has been presented, the LCP algorithm emits a new candidate (at most one) to the performance timeline if there is a new largest text or image that was painted in that frame. The algorithm also tracks the "largest pending image", which is the largest still-loading image, and uses that image's size to determine whether the new candidate is largest. This means a slow loading large image can prevent emission of intermediate LCP candidates, and these candidates often provide useful information for you to understand the loading progression.
This behavior emerged during Interop 2025 as a difference with other engines, and the team agreed to align to emit at most one candidate per frame based on the set of painted image and text elements for that frame.
Tracking bug #482261053 | ChromeStatus.com entry | Spec
Security
Sanitizer APIThe Sanitizer API offers a way to remove content that might execute script from arbitrary, user-supplied HTML content. The goal is to make it easier to build XSS-free web applications.
Tracking bug #40138584 | ChromeStatus.com entry | Spec
Origin trials WebNNWebNN lets web applications and frameworks take advantage of native operating system services for machine learning and the underlying hardware capabilities available on your computer to implement consistent, efficient, and reliable ML experiences on the web.
Origin Trial | Tracking bug #40206287 | ChromeStatus.com entry | Spec
CPU Performance APIThis API exposes information about your device's power. This API targets web applications that use this information to provide an improved user experience, possibly in combination with the Compute Pressure API, which provides information about the device's CPU pressure or utilization and lets applications react to changes in CPU pressure.
Tracking bug #449760252 | ChromeStatus.com entry | Spec
Speculation rules: form_submission fieldSpeculation rules:
form_submission
fieldThis extends
speculation rules
syntax, letting you specify the
form_submission
field for
prerender
.This field directs the browser to prepare the
prerender
as a form submission, so it can be activated by real form submission navigations. For example, a simple search form results in a
/search?q=XXX
GET request navigation; web developers have requested support for this.Tracking bug #346555939 | ChromeStatus.com entry | Spec
FocusgroupThe Focusgroup feature facilitates keyboard focus navigation among a set of focusable elements by using the keyboard arrow keys.
Learn more about focusgroup in
Request for developer feedback: focusgroup
.Origin Trial | Tracking bug #1286127 | ChromeStatus.com entry | Spec
Last updated 2026-03-10 UTC.
Original source Report a problem - Feb 25, 2026
- Date parsed from source:Feb 25, 2026
- First seen by Releasebot:Mar 18, 2026
What's New in WebGPU (Chrome 146)
Google Chrome releases WebGPU updates for Chrome 146, adding compatibility mode on OpenGL ES 3.1 to broaden access to older devices, support for transient attachments, WGSL texture_and_sampler_let, and Dawn updates with new limit tiers and SPIR-V validation on Android.
What's New in Web GPU (Chrome 146)
Published: February 25, 2026
Support WebGPU compatibility mode on OpenGL ES 3.1
While WebGPU is designed to align with modern graphics APIs like Vulkan, Metal, and D3D12, many users have older hardware that does not support these standards. To bridge this gap and ensure broad accessibility, Chrome introduces a new opt-in feature called compatibility mode.
This mode lets you run WebGPU on older graphics APIs like OpenGL ES 3.1. By targeting a slightly restricted subset of the WebGPU spec, you ensure your web app is accessible to everyone, from the latest gaming rigs to older laptops and mobile devices. While starting with Android, the team is exploring support for other devices, such as ChromeOS with OpenGL ES 3.1 and Windows with Direct3D 11.
For many web apps, you can enable compatibility mode by passing
featureLevel: "compatibility"
when you call
requestAdapter(). If your device supports Core WebGPU, Chrome will return a Core-capable adapter, but your web app will know to stay within the compatibility limits unless it enables the
"core-features-and-limits"
feature (or enables all available features). More complex applications might require minor adjustments to fit within the mode's restrictions.// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
const device = await adapter.requestDevice();See the WebGPU Fundamentals guide for detailed information about the specific architectural restrictions of this mode. Additionally, all WebGPU samples now support compatibility mode. You can also read the intent to ship.
Transient attachments
You can use the new
TRANSIENT_ATTACHMENT
GPUTextureUsage flag to create memory-efficient attachments. This lets render pass operations stay in tile memory, which avoids VRAM traffic and can avoid VRAM allocation for the textures.By declaring a texture as transient (or "memoryless"), the GPU knows that it only needs the texture's contents temporarily—specifically, only within the current render pass. Moreover, because the texture's contents are discarded after the render pass, the driver may not need to allocate VRAM for it at all.
The following example shows how to create a transient texture.
const adapter = await navigator.gpu.requestAdapter(); const device = await adapter.requestDevice(); if ('TRANSIENT_ATTACHMENT' in GPUTextureUsage) { const transientTexture = device.createTexture({ size: [42, 42], // The TRANSIENT_ATTACHMENT flag indicates the texture content is temporary, // potentially keeping it in fast on-chip memory. usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT, format: 'rgba8unorm', }); }See the Hello Triangle MSAA - WebGPU Sample and the intent to ship.
WGSL texture_and_sampler_let extension
The WGSL language extension
texture_and_sampler_let
lets you assign texture or sampler variables to a
let
within a WGSL shader. This feature currently provides an alternative naming mechanism and prepares for bindless support where methods returning textures or samplers can be stored directly into local variables.See the following example and the intent to ship.
@group(0) @binding(0) var tex : texture_2d<f32>; @group(1) @binding(0) var store : texture_storage_2d<r32float, read_write>; @fragment fn main() { let a = tex; var res : vec4f = textureLoad(a, vec2i(1i), 0); textureStore(store, vec2i(0i), res); }Dawn updates
The following new limit tiers are available:
- maxStorageBuffersPerShaderStage supports up to 16. See issue 366151398.
- maxSampledTexturesPerShaderStage supports up to 48. See issue 475255737.
SPIR-V validation is enabled by default on Android to provide an additional security layer and prevent driver instability from malformed input. See issue 473526182.
This covers only some of the key highlights. Check out the exhaustive list of commits.
What's New in WebGPU
A list of everything that has been covered in the What's New in WebGPU series.
Chrome 146
- Support WebGPU compatibility mode on OpenGL ES 3.1
- Transient attachments
- WGSL texture_and_sampler_let
- Dawn updates
Last updated 2026-02-25 UTC.
Original source Report a problem - Feb 25, 2026
- Date parsed from source:Feb 25, 2026
- First seen by Releasebot:Feb 25, 2026
What's New in Web GPU (Chrome 146)
Chrome 146 introduces WebGPU compatibility mode for OpenGL ES 3.1, broadening accessibility across older devices. It also adds transient attachments, WGSL texture_and_sampler_let, and Dawn updates, plus new shader and validation improvements.
Support WebGPU compatibility mode on OpenGL ES 3.1
While WebGPU is designed to align with modern graphics APIs like Vulkan, Metal, and D3D12, many users have older hardware that does not support these standards. To bridge this gap and ensure broad accessibility, Chrome introduces a new opt-in feature called compatibility mode.
This mode lets you run WebGPU on older graphics APIs like OpenGL ES 3.1. By targeting a slightly restricted subset of the WebGPU spec, you ensure your web app is accessible to everyone, from the latest gaming rigs to older laptops and mobile devices. While starting with Android, the team is exploring support for other devices, such as ChromeOS with OpenGL ES 3.1 and Windows with Direct3D 11.
For many web apps, you can enable compatibility mode by passing featureLevel: "compatibility" when you call requestAdapter(). If your device supports Core WebGPU, Chrome will return a Core-capable adapter, but your web app will know to stay within the compatibility limits unless it enables the "core-features-and-limits" feature (or enables all available features). More complex applications might require minor adjustments to fit within the mode's restrictions.
// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" }); const device = await adapter.requestDevice();See the WebGPU Fundamentals guide for detailed information about the specific architectural restrictions of this mode. Additionally, all WebGPU samples now support compatibility mode. You can also read the intent to ship.
Transient attachments
You can use the new TRANSIENT_ATTACHMENT GPUTextureUsage flag to create memory-efficient attachments. This lets render pass operations stay in tile memory, which avoids VRAM traffic and can avoid VRAM allocation for the textures.
By declaring a texture as transient (or "memoryless"), the GPU knows that it only needs the texture's contents temporarily—specifically, only within the current render pass. Moreover, because the texture's contents are discarded after the render pass, the driver may not need to allocate VRAM for it at all.
The following example shows how to create a transient texture.
const adapter = await navigator.gpu.requestAdapter(); const device = await adapter.requestDevice(); if ('TRANSIENT_ATTACHMENT' in GPUTextureUsage) { const transientTexture = device.createTexture({ size: [42, 42], // The TRANSIENT_ATTACHMENT flag indicates the texture content is temporary, // potentially keeping it in fast on-chip memory. usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT, format: 'rgba8unorm', }); }See the Hello Triangle MSAA - WebGPU Sample and the intent to ship.
WGSL texture_and_sampler_let extension
The WGSL language extension texture_and_sampler_let lets you assign texture or sampler variables to a let within a WGSL shader. This feature currently provides an alternative naming mechanism and prepares for bindless support where methods returning textures or samplers can be stored directly into local variables.
See the following example and the intent to ship.
@group(0) @binding(0) var tex : texture_2d<f32>; @group(1) @binding(0) var store : texture_storage_2d<r32float, read_write>; @fragment fn main() { let a = tex; var res : vec4f = textureLoad(a, vec2i(1i), 0); textureStore(store, vec2i(0i), res); }Dawn updates
The following new limit tiers are available:
- maxStorageBuffersPerShaderStage supports up to 16. See issue 366151398.
- maxSampledTexturesPerShaderStage supports up to 48. See issue 475255737.
SPIR-V validation is enabled by default on Android to provide an additional security layer and prevent driver instability from malformed input. See issue 473526182.
This covers only some of the key highlights. Check out the exhaustive list of commits.
What's New in WebGPU
A list of everything that has been covered in the What's New in WebGPU series.
Chrome 146
- Support WebGPU compatibility mode on OpenGL ES 3.1
- Transient attachments
- WGSL texture_and_sampler_let
- Dawn updates
- Feb 11, 2026
- Date parsed from source:Feb 11, 2026
- First seen by Releasebot:Mar 18, 2026
What's new in Dev Tools (Chrome 145)
Google Chrome releases Chrome DevTools enhancements in version 145, including MCP server updates with auto-connect, unified emulation, and preserved logs; soft navigations in trace view; precise line-level profiling and faster trace interaction; render-blocking resource identification and individual request throttling; CSS @starting-style debugging; AI assistance paste from clipboard; UI and accessibility improvements.
Similar to Chrome 139, for Chrome 145 the Chrome DevTools team prioritized product excellence, tackling known issues, unifying UI implementations, and improving test health. The numerous subtle fixes and refinements across various panels landed through this effort should make your daily debugging and development workflows smoother, more reliable, and more productive.
Dev Tools MCP server updates
The DevTools MCP server has received significant updates from v0.11.0 to v0.14.0, introducing key automation and emulation capabilities.
- Auto Connection: The new --auto-connect flag allows the server to automatically discover and attach to a running Chrome instance, removing the need to manually copy WebSocket URLs.
- Unified Emulation: A single emulate tool now handles geolocation, network conditions (offline/slow 3G), CPU throttling, and user agent overrides.
- Preserved Logs: You can now access network requests and console messages across navigations, mirroring the "Preserve Log" functionality in DevTools.
See the public changelog on GitHub for the full list of changes.
Soft Navigations are now visible in trace view
Soft navigation and soft LCP markers are now visible in the Performance panel trace view if your website is using Single Page Application (SPA) architecture. This makes it significantly easier to debug performance in modern web applications where navigations happen without a full page reload.
Read more about soft navigations on this blog post. The live metrics view and Performance Insights don't reflect soft navigations, but that work is planned for future releases as work on this API continues.
[Image: A soft nav marker in the Performance panel with a trace from youtube.com.]
Chromium issues: 450673886, 450673887
Line-level profiler timings now far more precise
After recording a trace in the Performance panel, the Sources panel displays the timings observed in the trace on a per-line basis. This lets you identify exactly which lines of code are consuming the most execution time.
This feature previously had bugs that made it unreliable when the source was pretty-formatted (using the {} button) or when using source-mapped scripts. These issues have been resolved, making line-level profiling accurate and usable for production-ready, minified code.
[Image: Execution timings next to line numbers in the Sources panel.]
Faster trace interaction
A major bottleneck in the Performance panel has been resolved. Previously, selecting time ranges or panning through busy traces could result in significant UI lag due to redundant event sorting. This has been optimized, making interaction with complex flame charts substantially more responsive.
Chromium issue: 457866795
Identify render-blocking resources
The Network panel now includes a dedicated Render blocking column. This lets you immediately identify which resources (JavaScript, CSS, and fonts) are preventing the browser from painting the page content, helping you optimize your First Paint performance.
[Image: The new Render blocking column in the network panel.]
Chromium issue: 41169154
Individual network request throttling
The Request conditions panel (formerly Network request blocking), which was introduced in Chrome 144, now has individual request throttling enabled by default.
While this feature was introduced in the previous milestone, it was disabled due to a late regression. In Chrome 145, you can now reliably throttle specific network requests to simulate slow dependencies or test how your app handles specific resource delays.
Open the panel from ⋮ > More Tools > Request Conditions to start throttling or blocking specific patterns.
Debugging improvements for @starting-style
Support for debugging the CSS @starting-style rule is now enabled by default. This feature helps you inspect styles applied when an element is first rendered, which is essential for debugging entry animations and transitions.
Chromium issue: 465367572
AI Assistance updates
- Multimodal Input: You can now paste images directly from your clipboard into the AI Assistance chat to ask questions about visual issues.
Chromium issue: 470997699
Miscellaneous highlights
- Elements: A new View source badge has been added next to the root tag, providing a quick way to jump to the document's source code.
- Sources: Editable JSON files now support a reversible pretty-print toggle, making it easier to edit data without losing the original formatting.
- Network: Context menu items have been updated to use sentence case for better readability.
- Console: Fixed an issue where filters for uncaught exceptions were lost after reloading the page.
Chromium issues: 378870233, 461041921, 433162438
Accessibility announcements
This version brings the following accessibility improvements:
- Search: Screen readers now announce the number of search results (e.g., "1 of 5") when using Ctrl+F.
- Recorder: Screen readers now announce when a recording has been successfully deleted or imported.
- Settings: Screen readers now announce the number of results when filtering in the Experiments tab.
- Privacy: The Origin group in the Privacy panel is now fully accessible using the keyboard.
- UI: Improved visibility of dock icons and disabled select elements for users in High Contrast and Forced Colors modes.
Chromium issues: 448675917, 392090449, 471713944, 471141907, 471095586
Original source Report a problem - Feb 11, 2026
- Date parsed from source:Feb 11, 2026
- First seen by Releasebot:Feb 18, 2026
What's new in Dev Tools (Chrome 145)
Chrome DevTools ships with a wave of improvements from UI polish to deep performance fixes and new automation. Highlights include unified emulation, preserved logs, soft navigations in trace view, precise line timing, faster traces, render blocking insights, and accessibility boosts.
Similar to Chrome 139, for Chrome 145 the Chrome DevTools team prioritized product excellence, tackling known issues, unifying UI implementations, and improving test health. The numerous subtle fixes and refinements across various panels landed through this effort should make your daily debugging and development workflows smoother, more reliable, and more productive.
Dev Tools MCP server updates
The DevTools MCP server has received significant updates from v0.11.0 to v0.14.0, introducing key automation and emulation capabilities.
- Auto Connection: The new --auto-connect flag allows the server to automatically discover and attach to a running Chrome instance, removing the need to manually copy WebSocket URLs.
- Unified Emulation: A single emulate tool now handles geolocation, network conditions (offline/slow 3G), CPU throttling, and user agent overrides.
- Preserved Logs: You can now access network requests and console messages across navigations, mirroring the "Preserve Log" functionality in DevTools.
See the public changelog on GitHub for the full list of changes.
Soft Navigations are now visible in trace view
Soft navigation and soft LCP markers are now visible in the Performance panel trace view if your website is using Single Page Application (SPA) architecture. This makes it significantly easier to debug performance in modern web applications where navigations happen without a full page reload.
Read more about soft navigations on this blog post. The live metrics view and Performance Insights don't reflect soft navigations, but that work is planned for future releases as work on this API continues.Line-level profiler timings now far more precise
After recording a trace in the Performance panel, the Sources panel displays the timings observed in the trace on a per-line basis. This lets you identify exactly which lines of code are consuming the most execution time.
This feature previously had bugs that made it unreliable when the source was pretty-formatted (using the {} button) or when using source-mapped scripts. These issues have been resolved, making line-level profiling accurate and usable for production-ready, minified code.Faster trace interaction
A major bottleneck in the Performance panel has been resolved. Previously, selecting time ranges or panning through busy traces could result in significant UI lag due to redundant event sorting. This has been optimized, making interaction with complex flame charts substantially more responsive.
Identify render-blocking resources
The Network panel now includes a dedicated Render blocking column. This lets you immediately identify which resources (JavaScript, CSS, and fonts) are preventing the browser from painting the page content, helping you optimize your First Paint performance.
Individual network request throttling
The Request conditions panel (formerly Network request blocking), which was introduced in Chrome 144, now has individual request throttling enabled by default.
While this feature was introduced in the previous milestone, it was disabled due to a late regression. In Chrome 145, you can now reliably throttle specific network requests to simulate slow dependencies or test how your app handles specific resource delays.
Open the panel from ⋮ > More Tools > Request Conditions to start throttling or blocking specific patterns.Debugging improvements for @starting-style
Support for debugging the CSS @starting-style rule is now enabled by default. This feature helps you inspect styles applied when an element is first rendered, which is essential for debugging entry animations and transitions.
AI Assistance updates
- Multimodal Input: You can now paste images directly from your clipboard into the AI Assistance chat to ask questions about visual issues.
Miscellaneous highlights
- Elements: A new View source badge has been added next to the root tag, providing a quick way to jump to the document's source code.
- Sources: Editable JSON files now support a reversible pretty-print toggle, making it easier to edit data without losing the original formatting.
- Network: Context menu items have been updated to use sentence case for better readability.
- Console: Fixed an issue where filters for uncaught exceptions were lost after reloading the page.
Accessibility announcements
This version brings the following accessibility improvements:
- Search: Screen readers now announce the number of search results (e.g., "1 of 5") when using Ctrl+F.
- Recorder: Screen readers now announce when a recording has been successfully deleted or imported.
- Settings: Screen readers now announce the number of results when filtering in the Experiments tab.
- Privacy: The Origin group in the Privacy panel is now fully accessible using the keyboard.
- UI: Improved visibility of dock icons and disabled select elements for users in High Contrast and Forced Colors modes.
- Feb 10, 2026
- Date parsed from source:Feb 10, 2026
- First seen by Releasebot:Mar 18, 2026
Chrome 145
Google Chrome releases Chrome 145 with broad platform stability and new web platform capabilities, including CSS typography upgrades, advanced layout properties, focus-visible UX, enhanced emoji rendering in forced colors, new navigation/transitions, and security/privacy enhancements, marking a stable multi‑device rollout.
CSS and UI
Add support for the text-justify CSS property
Add support for the
text-justify
CSS propertyYou can control how text is justified when
text-align: justify
is applied by using the
text-justify
property. For example, you can force justification by expanding inter-character space even in English text.Tracking bug #40321528 | ChromeStatus.com entry | Spec
Enable percentage values for CSS letter-spacing and word-spacing properties
Enable percentage values for the
letter-spacing
and
word-spacing
CSS properties, as defined in the CSS Text Module Level 4 specification. Percentage values are calculated relative to the advance measure of the space character (
U+0020
). This provides you with more robust and flexible control over typography, particularly in responsive designs where text spacing needs to adapt to different viewports and font sizes.Tracking bug #327740939 | ChromeStatus.com entry | Spec
Refine border-radius shadow edge computation for high border-radius
Refine border-radius shadow edge computation for high
border-radiusThis change 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 provides 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 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.Tracking bug #448651073 | ChromeStatus.com entry | Spec
Column wrapping for multicol
Add support for the
column-wrap
and
column-height
CSS properties, from multicol Level 2.This enables vertical column layout, or even 2D column layout. Columns can have an explicit constrained height, rather than being derived from the
content-box
height of the multicol container. They wrap to a new row of columns when all columns have been filled for one row, instead of creating overflowing columns in the inline direction.Tracking bug #403183884 | ChromeStatus.com entry | Spec
Expose onanimationcancel event to GlobalEventHandlers
Expose
onanimationcancel
event to
GlobalEventHandlersThe CSS Animations Level 1 extends the
GlobalEventHandlers
interface defined in the HTML specification, declaring four new event handlers:
onanimationstart
,
onanimationiteration
,
onanimationend
, and
onanimationcancel
. Only the
onanimationcancel
event handler has been missing from the
GlobalEventHandlers
IDL.Tracking bug #464010037 | ChromeStatus.com entry | Spec
Customizable select listbox
This extends customizable select support to the listbox rendering mode, including single-select and multi-select in listbox mode.
The listbox rendering mode renders the
select
element in-flow or in the page, rather than with a separate button and popup. You can opt into listbox rendering mode across platforms using the
multiple
or
size
attributes, for example,
or
. When the
appearance: base-select
CSS property is applied to the
select
element with these attributes, it has improved rendering and input behavior.This does not support customizable
select
for the multi-select popup, which will be supported later. You must set the following attributes to get a multi-select popup:
.Tracking bug #357649033 | ChromeStatus.com entry | Spec
The focusVisible option on focus
The
focusVisible
option on
focusWhen calling the
focus()
method, you can supply a
focusVisible
boolean in the
FocusOptions
dictionary. When true, a focus ring is always painted around the newly-focused element, and it matches the
:focus-visible
pseudo-class. When false, the focus ring is not painted, and
:focus-visible
does not match. When missing, the user agent makes its own determination as to whether the focus ring should be painted, and the
:focus-visible
pseudo-class matches accordingly.Tracking bug #462191849 | ChromeStatus.com entry | 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 therefore suppresses 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.
Tracking bug #420857717 | ChromeStatus.com entry | Spec
Overscroll effect on non-root scrollers
This 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
.Tracking bug #41102897 | ChromeStatus.com entry | Spec
Capabilities
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
.Chrome previously incorrectly assumed that all browser windows on Android start at coordinates (0, 0). This assumption is inaccurate for Android tablets that use freeform windowing mode. Websites always received 0 when querying the window's on-screen position using
window.screenX
and
window.screenY
. These fields store the coordinates of the 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.
window.screenX
and
window.screenY
have aliases:
window.screenLeft
and
window.screenTop
.Tracking bug #417632037 | ChromeStatus.com entry | Spec
JavaScript
Upsert
This is an ECMAScript proposal for
Map.prototype.getOrInsert
,
Map.prototype.getOrInsertComputed
,
WeakMap.prototype.getOrInsert
, and
WeakMap.prototype.getOrInsertComputed
.Tracking bug #434977728 | ChromeStatus.com entry | Spec
Crash Reporting key-value API
A new key-value API,
window.crashReport
, is backed by a per-Document map holding data that Chrome appends to crash reports.The data placed in this API's backing map is sent in the
CrashReportBody
if any renderer process crashes are incurred by the site. This lets you debug what specific state in your application might be causing a given crash.Tracking bug #400432195 | ChromeStatus.com entry | Spec
Reduced User-Agent strings by default
Starting in Chrome 145, Chrome removes the
UserAgentReduction
policy. This policy was 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 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 information, see the web.dev article,
Migrate to User-Agent Client Hints
.From Chrome 145 onwards, the
UserAgentReduction
policy has no effect. Chrome sends a reduced User-Agent string by default. Systems or applications that relied on this policy to receive the full (legacy) User-Agent string might no longer receive the detailed information they expect.ChromeStatus.com entry
Navigation API: expose destination in navigation.transition
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.navigation.transition
is only exposed for intercepted navigations—which means same-origin document-initiated navigations.Tracking bug #447171238 | ChromeStatus.com entry | Spec
Secure Payment Confirmation: Browser Bound Keys
This adds an additional cryptographic signature over Secure Payment Confirmation assertions and credential creation. The corresponding private key is not synced across devices. This helps you meet requirements for device binding for payment transactions.
Tracking bug #377278827 | ChromeStatus.com entry | Spec
Secure Payment Confirmation: UX Refresh
Updates the UX elements for the SPC dialog on Android Chrome.
In addition to UX presentation, the following are added:
• Merchants can provide an optional list of payment entity logos related to the payment that are displayed in the UX.
• Different output states are returned to the merchant depending on whether the user wants to continue the transaction without SPC or to cancel the transaction. Only a single output state is sent for both cases.
• A new payment detail label field is added to the payment instrument so the text is presented across two lines in SPC.Tracking bug #405173922 | ChromeStatus.com entry | Spec
Cookie Store API maxAge attribute
Cookie Store API
maxAge
attributeYou can 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.Tracking bug #430926231 | ChromeStatus.com entry | Spec
InputEvent types for deletion commands on non-collapsed selections
This 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 report
deleteContentBackward
or
deleteContentForward
instead of
deleteWordBackward
or
deleteWordForward
. This lets you correctly understand what editing operation occurred and implement reliable undo, redo, or custom editing behaviors.Tracking bug #41423062 | ChromeStatus.com entry | Spec
Sticky activation for the clipboardchange event
Sticky activation for the
clipboardchange
eventThis requires sticky user activation or
clipboard-read
permission to fire
clipboardchange
events, preventing unauthorized clipboard monitoring.The
clipboardchange
event is relatively new (Chrome 144), and this has minimal web-facing change. In most cases, sticky user activation or
clipboard-read
permission is already present where clipboard monitoring occurs (for example, in remote desktop clients).Tracking bug #468821937 | ChromeStatus.com entry | Spec
Multimedia
Expose rtpTimestamp from WebRTC video frames with VideoFrame.metadata()
Expose
rtpTimestamp
from WebRTC video frames with
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 have the
rtpTimestamp
metadata attached.Additional metadata fields are already present in the native implementation and might be exposed to JavaScript over time, as outlined in the proposed spec.
ChromeStatus.com entry | Spec
Storage
IndexedDB: SQLite backend (in-memory contexts)
Chromium's
IndexedDB
implementation has been 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 improves reliability and, to a lesser extent, performance.
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 and defers the need to migrate existing data persisted to disk.
Tracking bug #436880911 | ChromeStatus.com entry | Spec
Performance
Let web applications understand bimodal performance timings
A new
confidence
field on the
PerformanceNavigationTiming
object lets you discern whether the navigation timings are representative for your web application.Tracking bug #1413848 | ChromeStatus.com entry | Spec
Add presentationTime and paintTime to performance entries
Add
presentationTime
and
paintTime
to performance entriesThis exposes
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 is done separately.
Tracking bug #378827535 | ChromeStatus.com entry | Spec
Use of CssPixels in LayoutShift API
This feature changes the attribution data (
prevRect
and
currentRect
) in the
LayoutShift API
to be reported in CSS pixels instead of physical pixels. The behavior is inconsistent with other layout-related APIs, which all use CSS pixels. This change improves consistency, simplifies usage for you, and aligns with expected units in debugging and tooling.Tracking bug #399058544 | ChromeStatus.com entry | Spec
Security
Device Bound Session Credentials
Device Bound Session Credentials (DBSC)
lets websites bind a user's session to their specific device, making it significantly harder for stolen session cookies to be used on other machines.ChromeStatus.com entry | Spec
The Origin API
The
origin
is a fundamental component of the web's implementation, essential to both the security and privacy boundaries that user agents maintain. The concept is well-defined between HTML and URL, along with widely-used adjacent concepts like
site
.Origins, however, are not directly exposed to you. Though there are various origin getters on various objects, each of those returns the ASCII serialization of an origin, not the origin itself. This has a few negative implications. Practically, you attempting to do same-origin or same-site comparisons when handling serialized origins often get things wrong in ways that lead to vulnerabilities. Philosophically, it seems like a missing security primitive that you struggle to polyfill accurately.
In Chrome 145, Chrome addresses this gap in the platform by introducing an
Origin
object that encapsulates the origin concept and provides helpful methods such as comparison, serialization, and parsing.Tracking bug #434131026 | ChromeStatus.com entry | Spec
Local Network Access split permissions
This is an enhancement to the Local Network Access (LNA) restrictions, where Chrome splits the permission required from one Local Network Access permission into two separate permissions.
The old permission is
local-network-access
. The new permissions are
local-network
(for LNA requests to IPs in the local address space) and
loopback-network
(for LNA requests to IPs in the loopback address space).The old permission is kept as an alias and continues to work for
permissions.query
and
Permissions Policy
. Enterprise policies continue to work the same; newer, more granular enterprise policies are added later.Tracking bug #465491626 | ChromeStatus.com entry | Spec
Trusted Types specification alignment
Trusted Types
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 Types
spec was co-written as a "monkey patch" spec along with the original implementation. It receives fresh attention as others are trying to implement the same spec. It has 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 might be developer observable. The intent is to update the implementation to match the spec as it is upstreamed into HTML.Meanwhile, WebKit has launched their implementation of the updated
Trusted Types
spec, which gives Chrome high confidence that this update is highly web compatible.Tracking bug #330516530 | ChromeStatus.com entry | Spec
Graphics
WebGPU: subgroup_uniformity feature
WebGPU:
subgroup_uniformity
featureThis adds a new scope to the uniformity analysis and changes which parts of the language are checked in each to enable subgroup functionality to be considered uniform in more cases.
Tracking bug #454653380 | ChromeStatus.com entry | Spec
Isolated Web Apps
WebRequest.SecurityInfo in Controlled Frame
WebRequest.SecurityInfo
in
Controlled FrameThis feature introduces a
WebRequest.SecurityInfo
API for
ControlledFrame
. It lets a web app 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 method for the app to confirm it's communicating with the correct server.Tracking bug #462114142 | ChromeStatus.com entry | Spec
Origin trials
JPEG XL decoding support (image/jxl) in blink
JPEG XL decoding support (
image/jxl
) in blinkAdds 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
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.ChromeStatus.com entry
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.Origin Trial | ChromeStatus.com entry
Deprecations and removals
Remove support for obsolete virtual cameras on macOS
Chrome removes support for obsolete virtual cameras for all macOS releases that it supports.
Tracking bug #461717105 | ChromeStatus.com entry
Remove BMP Extension for Embedding JPEG-or-PNG-in-BMP
Chrome removes the BMP extension for embedding JPEG-or-PNG-in-BMP.
Tracking bug #456842524 | ChromeStatus.com entry | Spec
Last updated 2026-02-10 UTC.
Original source Report a problem - Feb 10, 2026
- Date parsed from source:Feb 10, 2026
- First seen by Releasebot:Feb 18, 2026
Chrome 145
Chrome 145 rolls out across Android, ChromeOS, Linux, macOS, and Windows with typography boosts, new CSS properties, expanded Web APIs, and security/privacy refinements. Expect improved text rendering, smarter layouts, and richer developer capabilities in this stable release.
Stable release date: February 10th, 2026
Unless otherwise noted, the following changes apply to Chrome 145 stable channel release for Android, ChromeOS, Linux, macOS, and Windows.
Want just the highlights? Check out New in Chrome 145.
CSS and UI
Add support for the text-justify CSS property
You can control how text is justified when text-align: justify is applied by using the text-justify property. For example, you can force justification by expanding inter-character space even in English text.
Tracking bug #40321528 | ChromeStatus.com entry | SpecEnable percentage values for CSS letter-spacing and word-spacing properties
Enable percentage values for the letter-spacing and word-spacing CSS properties, as defined in the CSS Text Module Level 4 specification. Percentage values are calculated relative to the advance measure of the space character (U+0020). This provides you with more robust and flexible control over typography, particularly in responsive designs where text spacing needs to adapt to different viewports and font sizes.
Tracking bug #327740939 | ChromeStatus.com entry | SpecRefine border-radius shadow edge computation for high border-radius
Refine border-radius shadow edge computation for high border-radius
This change 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 provides 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 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.
Tracking bug #448651073 | ChromeStatus.com entry | SpecColumn wrapping for multicol
Add support for the column-wrap and column-height CSS properties, from multicol Level 2.
This enables vertical column layout, or even 2D column layout. Columns can have an explicit constrained height, rather than being derived from the content-box height of the multicol container. They wrap to a new row of columns when all columns have been filled for one row, instead of creating overflowing columns in the inline direction.
Tracking bug #403183884 | ChromeStatus.com entry | SpecExpose onanimationcancel event to GlobalEventHandlers
Expose onanimationcancel event to GlobalEventHandlers
The CSS Animations Level 1 extends the GlobalEventHandlers interface defined in the HTML specification, declaring four new event handlers: onanimationstart, onanimationiteration, onanimationend, and onanimationcancel. Only the onanimationcancel event handler has been missing from the GlobalEventHandlers IDL.
Tracking bug #464010037 | ChromeStatus.com entry | SpecCustomizable select listbox
This extends customizable select support to the listbox rendering mode, including single-select and multi-select in listbox mode.
The listbox rendering mode renders the select element in-flow or in the page, rather than with a separate button and popup. You can opt into listbox rendering mode across platforms using the multiple or size attributes, for example, or . When the appearance: base-select CSS property is applied to the select element with these attributes, it has improved rendering and input behavior.
This does not support customizable select for the multi-select popup, which will be supported later. You must set the following attributes to get a multi-select popup: .
Tracking bug #357649033 | ChromeStatus.com entry | SpecThe focusVisible option on focus
The focusVisible option on focus
When calling the focus() method, you can supply a focusVisible boolean in the FocusOptions dictionary. When true, a focus ring is always painted around the newly-focused element, and it matches the :focus-visible pseudo-class. When false, the focus ring is not painted, and :focus-visible does not match. When missing, the user agent makes its own determination as to whether the focus ring should be painted, and the :focus-visible pseudo-class matches accordingly.
Tracking bug #462191849 | ChromeStatus.com entry | SpecEnable 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 therefore suppresses 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.
Tracking bug #420857717 | ChromeStatus.com entry | SpecOverscroll effect on non-root scrollers
This 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.
Tracking bug #41102897 | ChromeStatus.com entry | SpecCapabilities
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.
Chrome previously incorrectly assumed that all browser windows on Android start at coordinates (0, 0). This assumption is inaccurate for Android tablets that use freeform windowing mode. Websites always received 0 when querying the window's on-screen position using window.screenX and window.screenY. These fields store the coordinates of the 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.
window.screenX and window.screenY have aliases: window.screenLeft and window.screenTop.
Tracking bug #417632037 | ChromeStatus.com entry | SpecJavaScript
Upsert
This is an ECMAScript proposal for Map.prototype.getOrInsert, Map.prototype.getOrInsertComputed, WeakMap.prototype.getOrInsert, and WeakMap.prototype.getOrInsertComputed.
Tracking bug #434977728 | ChromeStatus.com entry | SpecCrash Reporting key-value API
A new key-value API, window.crashReport, is backed by a per-Document map holding data that Chrome appends to crash reports.
The data placed in this API's backing map is sent in the CrashReportBody if any renderer process crashes are incurred by the site. This lets you debug what specific state in your application might be causing a given crash.
Tracking bug #400432195 | ChromeStatus.com entry | SpecReduced User-Agent strings by default
Starting in Chrome 145, Chrome removes the UserAgentReduction policy. This policy was 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 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 information, see the web.dev article, Migrate to User-Agent Client Hints.
From Chrome 145 onwards, the UserAgentReduction policy has no effect. Chrome sends a reduced User-Agent string by default. Systems or applications that relied on this policy to receive the full (legacy) User-Agent string might no longer receive the detailed information they expect.
ChromeStatus.com entryNavigation API: expose destination in navigation.transition
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.
navigation.transition is only exposed for intercepted navigations—which means same-origin document-initiated navigations.
Tracking bug #447171238 | ChromeStatus.com entry | SpecSecure Payment Confirmation: Browser Bound Keys
This adds an additional cryptographic signature over Secure Payment Confirmation assertions and credential creation. The corresponding private key is not synced across devices. This helps you meet requirements for device binding for payment transactions.
Tracking bug #377278827 | ChromeStatus.com entry | SpecSecure Payment Confirmation: UX Refresh
Updates the UX elements for the SPC dialog on Android Chrome.
In addition to UX presentation, the following are added:
• Merchants can provide an optional list of payment entity logos related to the payment that are displayed in the UX.
• Different output states are returned to the merchant depending on whether the user wants to continue the transaction without SPC or to cancel the transaction. Only a single output state is sent for both cases.
• A new payment detail label field is added to the payment instrument so the text is presented across two lines in SPC.
Tracking bug #405173922 | ChromeStatus.com entry | SpecCookie Store API maxAge attribute
Cookie Store API maxAge attribute
You can 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.
Tracking bug #430926231 | ChromeStatus.com entry | SpecInputEvent types for deletion commands on non-collapsed selections
This 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 report deleteContentBackward or deleteContentForward instead of deleteWordBackward or deleteWordForward. This lets you correctly understand what editing operation occurred and implement reliable undo, redo, or custom editing behaviors.
Tracking bug #41423062 | ChromeStatus.com entry | SpecSticky activation for the clipboardchange event
Sticky activation for the clipboardchange event
This requires sticky user activation or clipboard-read permission to fire clipboardchange events, preventing unauthorized clipboard monitoring.
The clipboardchange event is relatively new (Chrome 144), and this has minimal web-facing change. In most cases, sticky user activation or clipboard-read permission is already present where clipboard monitoring occurs (for example, in remote desktop clients).
Tracking bug #468821937 | ChromeStatus.com entry | SpecMultimedia
Expose rtpTimestamp from WebRTC video frames with VideoFrame.metadata()
Expose rtpTimestamp from WebRTC video frames with 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 have the rtpTimestamp metadata attached.
Additional metadata fields are already present in the native implementation and might be exposed to JavaScript over time, as outlined in the proposed spec.
ChromeStatus.com entry | SpecStorage
IndexedDB: SQLite backend (in-memory contexts)
Chromium's IndexedDB implementation has been 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 improves reliability and, to a lesser extent, performance.
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 and defers the need to migrate existing data persisted to disk.
Tracking bug #436880911 | ChromeStatus.com entry | SpecPerformance
Let web applications understand bimodal performance timings
A new confidence field on the PerformanceNavigationTiming object lets you discern whether the navigation timings are representative for your web application.
Tracking bug #1413848 | ChromeStatus.com entry | SpecAdd presentationTime and paintTime to performance entries
Add presentationTime and paintTime to performance entries
This exposes 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 is done separately.
Tracking bug #378827535 | ChromeStatus.com entry | SpecUse of CssPixels in LayoutShift API
This feature changes the attribution data (prevRect and currentRect) in the LayoutShift API to be reported in CSS pixels instead of physical pixels. The behavior is inconsistent with other layout-related APIs, which all use CSS pixels. This change improves consistency, simplifies usage for you, and aligns with expected units in debugging and tooling.
Tracking bug #399058544 | ChromeStatus.com entry | SpecSecurity
Device Bound Session Credentials
Device Bound Session Credentials (DBSC) lets websites bind a user's session to their specific device, making it significantly harder for stolen session cookies to be used on other machines.
ChromeStatus.com entry | SpecThe Origin API
The origin is a fundamental component of the web's implementation, essential to both the security and privacy boundaries that user agents maintain. The concept is well-defined between HTML and URL, along with widely-used adjacent concepts like site.
Origins, however, are not directly exposed to you. Though there are various origin getters on various objects, each of those returns the ASCII serialization of an origin, not the origin itself. This has a few negative implications. Practically, you attempting to do same-origin or same-site comparisons when handling serialized origins often get things wrong in ways that lead to vulnerabilities. Philosophically, it seems like a missing security primitive that you struggle to polyfill accurately.
In Chrome 145, Chrome addresses this gap in the platform by introducing an Origin object that encapsulates the origin concept and provides helpful methods such as comparison, serialization, and parsing.
Tracking bug #434131026 | ChromeStatus.com entry | SpecLocal Network Access split permissions
This is an enhancement to the Local Network Access (LNA) restrictions, where Chrome splits the permission required from one Local Network Access permission into two separate permissions.
The old permission is local-network-access. The new permissions are local-network (for LNA requests to IPs in the local address space) and loopback-network (for LNA requests to IPs in the loopback address space).
The old permission is kept as an alias and continues to work for permissions.query and Permissions Policy. Enterprise policies continue to work the same; newer, more granular enterprise policies are added later.
Tracking bug #465491626 | ChromeStatus.com entry | SpecTrusted Types specification alignment
Trusted Types 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 Types spec was co-written as a "monkey patch" spec along with the original implementation. It receives fresh attention as others are trying to implement the same spec. It has 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 might be developer observable. The intent is to update the implementation to match the spec as it is upstreamed into HTML.
Meanwhile, WebKit has launched their implementation of the updated Trusted Types spec, which gives Chrome high confidence that this update is highly web compatible.
Tracking bug #330516530 | ChromeStatus.com entry | SpecGraphics
WebGPU: subgroup_uniformity feature
WebGPU: subgroup_uniformity feature
This adds a new scope to the uniformity analysis and changes which parts of the language are checked in each to enable subgroup functionality to be considered uniform in more cases.
Tracking bug #454653380 | ChromeStatus.com entry | SpecIsolated Web Apps
WebRequest.SecurityInfo in Controlled Frame
WebRequest.SecurityInfo in Controlled Frame
This feature introduces a WebRequest.SecurityInfo API for ControlledFrame. It lets a web app 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 method for the app to confirm it's communicating with the correct server.
Tracking bug #462114142 | ChromeStatus.com entry | SpecOrigin trials
JPEG XL decoding support (image/jxl) in blink
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 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.
ChromeStatus.com entryWebAudio: 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.
Origin Trial | ChromeStatus.com entryDeprecations and removals
Remove support for obsolete virtual cameras on macOS
Chrome removes support for obsolete virtual cameras for all macOS releases that it supports.
Tracking bug #461717105 | ChromeStatus.com entryRemove BMP Extension for Embedding JPEG-or-PNG-in-BMP
Original source Report a problem
Chrome removes the BMP extension for embedding JPEG-or-PNG-in-BMP.
Tracking bug #456842524 | ChromeStatus.com entry | Spec