Published: January 15, 2024
Unless otherwise noted, the following changes apply to the newest Chrome beta channel release for Android, ChromeOS, Linux, macOS, and Windows. Learn more about the features listed here through the provided links or from the list on ChromeStatus.com. Chrome 133 is beta as of January 15, 2024. You can download the latest on Google.com for desktop or on Google Play Store on Android.
CSS and UI
This release adds seven new CSS and UI features.
CSS advanced attr()
function
Implements the augmentation to attr()
specified in CSS Level 5, which allows
types besides <string>
and use in all CSS properties (in addition to the
existing support for the pseudo-element content
).
Find out more in CSS attr()
gets an upgrade.
CSS :open
pseudo-class
The :open
pseudo-class matches <dialog>
and <details>
when they are in
their open state, and matches <select>
and <input>
when they are in modes
which have a picker and the picker is showing.
CSS scroll state container queries
Use container queries to style descendants of containers based on their scroll state.
The query container is either a scroll container, or an element affected by the scroll position of a scroll container. The following states can be queried:
stuck
: A sticky positioned container is stuck to one of the edges of the scroll box.snapped
: A scroll snap aligned container is currently snapped horizontally or vertically.scrollable
: Whether a scroll container can be scrolled in a queried direction.
A new container-type: scroll-state
lets containers be queried.
#sticky {
position: sticky;
container-type: scroll-state;
}
@container scroll-state(stuck: top) {
#sticky-child {
font-size: 75%;
}
}
Learn more in CSS scroll-state()
.
CSS text-box
, text-box-trim
, and text-box-edge
To achieve optimal balance of text content, the text-box-trim
and
text-box-edge
properties, along with the text-box
shorthand property, make
finer control of vertical alignment of text possible.
The text-box-trim
property specifies the sides to trim, above or below, and
the text-box-edge
property specifies how the edge should be trimmed.
These properties let you control vertical spacing precisely by using the font metrics. Find out more in CSS text-box-trim.
The hint
value of the popover
attribute
The Popover API specifies the behavior for two values of the popover
attribute: auto
and manual
. This feature describes a third value,
popover=hint
. Hints, which are most often associated with "tooltip" type
behaviors, have slightly different behaviors. Primarily, the difference is that
a hint
is subordinate to auto
when opening nested stacks of popovers. So it
is possible to open an unrelated hint
popover while an existing stack of
auto
popovers stays open.
The canonical example is that a <select>
picker is open (popover=auto
) and a
hover-triggered tooltip (popover=hint
) is shown. That action does not close
the <select>
picker.
Popover invoker and anchor positioning improvements
Adds an imperative way to set invoker relationships between popovers with
popover.showPopover({source})
. Enables invoker relationships to create
implicit anchor element references.
Popover nested inside invoker shouldn't re-invoke it
In the following case clicking the button properly activates the popover, however, clicking on the popover itself after that should not close the popover.
<button popovertarget=foo>Activate
<div popover id=foo>Clicking me shouldn't close me</div>
</button>
Previously this happened, because the popover click bubbles to the <button>
and activates the invoker, which toggles the popover closed. This has now been
changed to the expected behavior.
Web APIs
Animation.overallProgress
Provides developers with a convenient and consistent representation of how far
along an animation has advanced across its iterations and regardless of the
nature of its timeline. Without the overallProgress
property, you need to
manually compute how far an animation has advanced, factoring in the number of
iterations of the animation and whether the currentTime
of the animation is a
percentage of total time (as in the case of scroll-driven animations) or an
absolute time quantity (as in the case of time-driven animations).
The pause()
method of the Atomics
object
Adds the pause()
method to the Atomics
namespace object, to hint the CPU
that the current code is executing a spinlock.
CSP hash reporting for scripts
Complex web applications often need to keep track of the subresources that they download, for security purposes.
In particular, upcoming industry standards and best practices (for example, PCI-DSS v4) require that web applications keep an inventory of all the scripts they download and execute.
This feature builds on CSP and the Reporting API to report the URLs and hashes (for CORS/same-origin) of all the script resources that the document loads.
DOM state-preserving move
Adds a DOM primitive (Node.prototype.moveBefore
) that lets you move elements
around a DOM tree, without resetting the element's state.
When moving instead of removing and inserting, following state such as the following is preserved:
<iframe>
elements remain loaded.- The active element remains focus.
- Popovers, fullscreen, and modal dialogs remain open.
- CSS transitions and animations continue.
Expose attributionsrc
attribute on <area>
Aligns exposure of the attributionsrc
attribute on <area>
with the existing
processing behavior of the attribute, even when it wasn't exposed.
Additionally, it makes sense to support the attribute on <area>
, as that
element is a first-class navigation surface, and Chrome already supports this on
the other surfaces of <a>
and window.open
Expose coarsened cross-origin renderTime
in element timing and LCP (regardless of Timing-Allow-Origin
)
Element timing and LCP entries have a renderTime
attribute, aligned with the
first frame in which an image or text was painted.
This attribute is currently guarded for cross-origin images by requiring a
Timing-Allow-Origin
header on the image resource. However, that restriction is
easy to work around (for example, by displaying a same-origin and cross-origin
image in the same frame).
Since this has been a source of confusion, we instead plan to remove this restriction, and instead coarsen all render times by 4 ms when the document is not cross-origin-isolated. This is seemingly coarse enough to avoid leaking any useful decoding-time information about cross-origin images.
The FileSystemObserver
interface
The FileSystemObserver
interface notifies
websites of changes to the file system. Sites observe changes to files and
directories, to which the user has previously granted permission, in the user's
local device, or in the Bucket File System (also known as the Origin Private
File System), and are notified of basic change info, such as the change type.
Freezing on Energy Saver
When Energy Saver is active, Chrome will freeze a "browsing context group" that has been hidden and silent for over five minutes if any subgroup of same-origin frames within it exceeds a CPU usage threshold, unless it:
- Provides audio- or video-conferencing functionality (detected by identifying microphone, camera or screen/window/tab capture or an RTCPeerConnection with an 'open' RTCDataChannel or a 'live' MediaStreamTrack).
- Controls an external device (detected with use of WebUSB, Web Bluetooth, WebHID, or Web Serial).
- Holds a Web Lock or an IndexedDB connection that blocks a version update or a transaction on a different connection.
Freezing consists of pausing execution. It is formally defined in the Page Lifecycle API.
The CPU usage threshold will be calibrated to freeze approximately 10% of background tabs when Energy Saver is active.
Multiple import maps
Import maps currently have to load before any ES module and there can only be a single import map per document. That makes them fragile and potentially slow to use in real-life scenarios: Any module that loads before them breaks the entire app, and in apps with many modules they become a large blocking resource, as the entire map for all possible modules needs to load first.
This feature enables multiple import maps per document, by merging them in a consistent and deterministic way.
Storage Access Headers
Offers an alternate way for authenticated embeds to opt in for unpartitioned cookies. These headers indicate whether unpartitioned cookies are (or can be) included in a given network request, and allow servers to activate 'storage-access' permissions they have already been granted. Giving an alternative way to activate the 'storage-access' permission allows usage by non-iframe resources, and can reduce latency for authenticated embeds.
Support creating ClipboardItem
with Promise<DOMString>
The ClipboardItem
, which is the input to the async clipboard write()
method,
now accepts string values in addition to Blobs in its constructor.
ClipboardItemData
can be a Blob, a string, or a Promise that resolves to
either a Blob or a string.
WebAssembly Memory64
The memory64 proposal adds support for linear WebAssembly memories with size larger than 2^32 bits. It provides no new instructions, but instead extends the existing instructions to allow 64-bit indexes for memories and tables.
Web Authentication API: PublicKeyCredential getClientCapabilities()
method
The PublicKeyCredential getClientCapabilities()
method lets you determine
which WebAuthn features are supported by the user's client. The method returns a
list of supported capabilities, allowing developers to tailor authentication
experiences and workflows based on the client's specific functionality.
WebGPU: 1-component vertex formats (and unorm8x4-bgra)
Adds additional vertex formats not present in the initial release of WebGPU due to lack of support or old macOS versions (which are no longer supported by any browser). The 1-component vertex formats let applications request only the necessary data when previously they had to request at least two times more for 8 and 16-bit data types. The unorm8x4-bgra format makes it slightly more convenient to load BGRA-encoded vertex colors while keeping the same shader.
X25519 algorithm of the Web Cryptography API
The "X25519" algorithm provides tools to perform key agreement using the X25519 function specified in [RFC7748]. The "X25519" algorithm identifier can be used in the SubtleCrypto interface to access the implemented operations: generateKey, importKey, exportKey, deriveKey and deriveBits.
New origin trials
In Chrome 133 you can opt into the following new origin trials.
Opt out of freezing on Energy Saver
This opt out trial lets sites opt out from the freezing on Energy Saver behavior that ships in Chrome 133.
Deprecations and removals
This version of Chrome introduces the deprecations and removals listed below. Visit ChromeStatus.com for lists of planned deprecations, current deprecations and previous removals.
This release of Chrome deprecates one feature.
Deprecate the WebGPU maxInterStageShaderComponents
limit
The maxInterStageShaderComponents limit
is deprecated due to a combination of
factors. The intended removal date in Chrome 135.
- Redundancy with
maxInterStageShaderVariables
: This limit already serves a similar purpose, controlling the amount of data passed between shader stages. - Minor discrepancies: While there are slight differences in how the two
limits are calculated, these differences are minor and can be effectively
managed within the
maxInterStageShaderVariables
limit. - Simplification: Removing
maxInterStageShaderComponents
streamlines the shader interface and reduces complexity for developers. Instead of managing two separate limits with subtle differences, they can focus on the more appropriately named and comprehensivemaxInterStageShaderVariables
.
This release of Chrome removes two features.
Remove <link rel=prefetch>
five-minute rule
Previously, when a resource was prefetched using <link rel=prefetch>
, Chrome
ignored its cache semantics (namely max-age
and no-cache
) for the first use
within five minutes, to avoid refetching. Now, Chrome removes this special case
and uses normal HTTP cache semantics.
This means web developers need to include appropriate caching headers
(Cache-Control or Expires) to see benefits from <link rel=prefetch>
.
This also affects the nonstandard <link rel=prerender>
.
Remove Chrome Welcome page triggering with initial prefs first run tabs
Including chrome://welcome
in the first_run_tabs
property of the
initial_preferences
file will now have no effect. This is removed because that
page is redundant with the First Run Experience that triggers on desktop
platforms.