Firefox 122 for developers
==========================

This article provides information about the changes in Firefox 122 that affect developers. Firefox 122 is the current Beta version of Firefox and ships on January 23, 2024.

Changes for web developers
--------------------------

### Developer Tools

### HTML

* `<hr>` elements are now allowed as children of `<select>` elements. This is a new feature that improves the readability of select lists with many options. (Firefox bug 1830909).
* The `type` HTML attribute no longer has an effect if set to `none`, `disc`, `circle` or `square` in `<ol>` and no longer has an effect if set to `1`, `a`, `A`, `i` or `I` in `<ul>`. As `type` is a deprecated attribute for `<ul>` and `<ol>` lists, these should be styled with `list-style-type` CSS property instead. (Firefox bug 1868087).

#### Removals

### CSS

* The CSS `offset-position` property is now available by default. It defines the initial position of an element on a path. (Firefox bug 1598152)
* The various methods for defining a CSS `offset-path` — including `<basic-shape>`, `<coord-box>`, and `url()` — are now enabled by default. (Firefox bug 1598159)
* The CSS `ray()` function is now available by default. You can use this function to define an `offset-path` as a line segment that begins from an `offset-position` and extends in the direction of the specified angle. (Firefox bug 1598151)
* The `clip-path` and `offset-path` properties now accept `rect()` and `xywh()` shape functions. These `<basic-shape>` values allow the clipping and offsetting of elements with a rectangle defined by distance from the edge of the element (`rect()`) or coordinates and size (`xywh()`). (Firefox bug 1868722).

#### Removals

### JavaScript

* The `ArrayBuffer.prototype.transfer()` and `ArrayBuffer.prototype.transferToFixedLength()` methods can now be used to transfer ownership of memory from one `ArrayBuffer` to another. After transfer, the original buffer is detached from its original memory and hence unusable; the state can be checked using `ArrayBuffer.prototype.detached`. (See Firefox bug 1865103 for more details.)

#### Removals

### SVG

#### Removals

* Removed support for `data:` URLs in SVG `<use>` elements and via the `SVGUseElement` interface to prevent XSS attacks.
 The legacy functionality may be re-enabled by setting the `svg.use-element.data-url-href.allowed` preference to `true`, although this is not recommended for security reasons (Firefox bug 1806964).
### HTTP

#### Removals

### Security

#### Removals

### APIs

* The LargestContentfulPaint API is now supported.
 This API is part of the Performance APIs and provides timing information about the largest image or text paint before users interact with a web page (Firefox bug 1866266).

#### DOM

### showPicker() method for HTML select elements

* The `HTMLSelectElement.showPicker()` method is now supported, allowing the browser picker for a `<select>` element to be programmatically launched when triggered by user interaction (Firefox bug 1865207).

#### Media, WebRTC, and Web Audio

#### Removals

### WebAssembly

#### Removals

### WebDriver conformance (WebDriver BiDi, Marionette)

#### General

* Fixed a bug that prevented Perform Actions to correctly synthesize double and other multi-click events for the `mouse` input source (Firefox bug 1864614). Additionally, these events will only be emitted when the actual mouse position has not changed since the last click action (Firefox bug 1681076).
* The definitions for the `Pause` and `Equal` (Numpad block) keys have been updated to align with the WebDriver specification (Firefox bug 1863687).

#### WebDriver BiDi

* The serialization of `WindowProxy` remote objects now also works correctly for out-of-process iframes (Firefox bug 1867667).
* The browsingContext.setViewport command now distinguishes between `undefined` and `null` as values for the `viewport` argument. If set to `undefined`, it signifies that the viewport should remain unchanged, while using `null` will reset it to its original dimensions (Firefox bug 1865618).
* Support for the browsingContext.traverseHistory command has been introduced, enabling navigations backward and forward in the browser history (Firefox bug 1841018).
* Fixed a bug in all supported network events where the `context` id consistently reported the top-level browsing context, even when the navigation occurred within an iframe (Firefox bug 1869735).

#### Marionette

* Fixed a bug with Get Element Text, where the command was incorrectly returning an empty text when the element was located within a ShadowRoot's slot (Firefox bug 1824664).
Changes for add-on developers
-----------------------------

### Removals

### Other

Experimental web features
-------------------------

These features are newly shipped in Firefox 122 but are disabled by default. To experiment with them, search for the appropriate preference on the `about:config` page and set it to `true`. You can find more such features on the Experimental features page.

* **Declarative shadow DOM:** `dom.webcomponents.shadowdom.declarative.enabled`.
 The `<template>` element now supports a `shadowrootmode` attribute which can be set to either `open` or `closed`, the same values as the `mode` option of the `attachShadow()` method. It allows the creation of a shadow DOM subtree declaratively. (Firefox bug 1712140)
* **Popover API:** `dom.element.popover.enabled`.
 Displaying popovers on top of page content is now supported via HTML attributes or JavaScript API, including styling with the CSS `:popover-open` pseudo-class and extended support for the `::backdrop` pseudo-element. See the Popover API reference for more details. (Firefox bug 1823757)
* **Clipboard read and write:** `dom.events.asyncClipboard.clipboardItem`, `dom.events.asyncClipboard.readText` and `dom.events.asyncClipboard.writeText`.
 The async `Clipboard API` is now fully supported, including `read()`, `readText()`, and `write()` methods and the `ClipboardItem` interface. A paste context menu will appear for the user to confirm when reading clipboard data not provided by the same-origin page. (Firefox bug 1809106)
* **`Intl.Segmenter`:** enabled by default only in Firefox Nightly.
 The `Intl.Segmenter` object allows accurate locale-sensitive text segmentation of a string. For example, to split a text into words in a language that doesn't use spaces to separate them: `Intl.Segmenter("ja-JP", { granularity: "word" })`. (Firefox bug 1423593)
Older versions
--------------

* Firefox 121 for developers
* Firefox 120 for developers
* Firefox 119 for developers
* Firefox 118 for developers
* Firefox 117 for developers
* Firefox 116 for developers
* Firefox 115 for developers
* Firefox 114 for developers
* Firefox 113 for developers
* Firefox 112 for developers
* Firefox 111 for developers
* Firefox 110 for developers
* Firefox 109 for developers
* Firefox 108 for developers
* Firefox 107 for developers
* Firefox 106 for developers
* Firefox 105 for developers
* Firefox 104 for developers
* Firefox 103 for developers
* Firefox 102 for developers
* Firefox 101 for developers
* Firefox 100 for developers
* Firefox 99 for developers
* Firefox 98 for developers
* Firefox 97 for developers
* Firefox 96 for developers
* Firefox 95 for developers
* Firefox 94 for developers
* Firefox 93 for developers
* Firefox 92 for developers
* Firefox 91 for developers