Firefox 116 for developers
==========================

This article provides information about the changes in Firefox 116 that affect developers. Firefox 116 was released on August 01, 2023.

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

### HTML

* The `dirname` attribute is now supported on `input` and `textarea` elements.
 This attribute allows for passing text directionality information (`ltr` or `rtl`) to the server during form submission (Firefox bug 675943).
### CSS

* The syntax has been updated for the `offset-path` property, which is used to define the path for an element to follow. The updated syntax allows you to set a value of `none` or one of `<offset-path>` or `<coord-box>`. The new `<offset-path>` value can be a `<ray()>`, a `<url>`, or a `<basic-shape>`. The `<coord-box>` value has replaced the older `<geometry-box>` value and lets you specify the shape of the path based on the element's box model. The `<basic-shape>` and `<coord-box>` values require the `layout.css.motion-path-basic-shapes.enabled` and `layout.css.motion-path-coord-box.enabled` preferences to be enabled, respectively. (Firefox bug 1598156) and (Firefox bug 1837305).
### Accessibility (ARIA)

* The `image` role is now supported as a synonym for `img`.
 This maintains consistency with most role names which are complete words or concatenations of complete words (Firefox bug 1829269).
### JavaScript

* `Intl.NumberFormat` supports new constructor options that control how numbers are rounded (`roundingIncrement`, `roundingMode`, `roundingPriority`), the strategy for displaying trailing zeros on whole numbers (`trailingZeroDisplay`), and whether to use grouping separators to indicate thousands, millions, and so on (`useGrouping`).
 It also supports new methods `formatRange()` amd `formatRangeToParts()` for formatting ranges of numbers.
 (Firefox bug 1795756).
* `Intl.PluralRules` was updated (as part of the same set of changes as `Intl.NumberFormat`) to support constructor options `roundingIncrement`, `roundingMode`, `roundingPriority` and `trailingZeroDisplay`, and the `selectRange()` method.
 (Firefox bug 1795756).
### SVG

* The `q` length unit (`1q = 1/40th of 1cm`) is now supported (Firefox bug 1836995).
### HTTP

* Configuring a Content-Security-Policy now supports specifying external JavaScript files to be whitelisted using hashes, where previously only inline scripts could be whitelisted using a hash (Firefox bug 1409200).
### APIs

#### DOM

* The `TextMetrics.fontBoundingBoxAscent` and `TextMetrics.fontBoundingBoxDescent` properties are now supported.
 These metrics return, respectively, the distance above and below the `CanvasRenderingContext2D.textBaseline` to the bounding rectangle of all the fonts used to render the text (Firefox bug 1801198).

#### Media, WebRTC, and Web Audio

* The Audio Output Devices API is now supported on all platforms except for Android.
 This API allows web applications to redirect audio output to a permitted Bluetooth headset, speakerphone, or other device, instead of having to use the browser or underlying OS default.
 Affected APIs include `MediaDevices.selectAudioOutput()`, `MediaDevices.enumerateDevices()`, `HTMLMediaElement.setSinkId()`, `HTMLMediaElement.sinkId`, and the permission policy `Permissions-Policy: speaker-selection` (Firefox bug 1498512).
### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Added support for the `session.end` command that allows users to terminate the automation session. This was previously only possible for sessions using both WebDriver Classic and WebDriver BiDi. It is now possible also for WebDriver BiDi-only sessions (Firefox bug 1829337).
* Added support for capability matching for the `session.new` command. It allows to define expectations about the target browser, such as browser name, platform name, etc. It can also be used to configure the session, for example, to specify if insecure certificates should be accepted (Firefox bug 1731730).
* Shadow roots are now correctly serialized when they are the root of a returned value (Firefox bug 1836514).
* The `network` event time origin information was renamed from `originTime` to `timeOrigin` (Firefox bug 1836926).
* The `network` event `network.responseCompleted` is now correctly emitted for navigation requests involving a redirect (Firefox bug 1838238).

#### Marionette

* Removed support for the `moz:useNonSpecCompliantPointerOrigin` capability. Users who still need this feature can still use the Firefox 115 ESR release as long as it is supported. Please file bugs under Remote Protocol :: Marionette if you're seeing any issue (Firefox bug 1490258).
* A regression was fixed that prevented us from differentiating stale elements (DOM elements that have been seen before on the page) from unknown elements for a given browsing context (Firefox bug 1822466).
* Creating a new session should now properly wait for the initial context to be loaded (Firefox bug 1838381).
Changes for add-on developers
-----------------------------

* The URL of a page visited when an extension is uninstalled, provided in `runtime.setUninstallURL`, can now be up to 1023 characters instead of 255 (Firefox bug 1835723).
* Adds `action.getUserSettings` providing the user-specified settings for an extension's browser action (Firefox bug 1814905).
* `autoDiscardable` is now supported in `tabs.Tab`, `tabs.onUpdated`, `tabs.update`, and `tabs.query` (Firefox bug 1809094).
Developer Tools
---------------

* Added support for Custom Formatters (Firefox bug 1752760).
* Added "container" badges in markup view on elements with a `container-type` property with `size` or `inline-size` values (Firefox bug 1789193).
* Fixed an issue in the Inspector where CSS custom properties set on the Custom Element Root were not displayed (Firefox bug 1836755).
* Show if request was resolved with DNS over HTTPS in Network Monitor (Firefox bug 1810195).
* Removed `Proxy-Authorization` header in Network Monitor (Firefox bug 1816115).
Older versions
--------------

* 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
* Firefox 90 for developers
* Firefox 89 for developers
* Firefox 88 for developers
* Firefox 87 for developers
* Firefox 86 for developers
* Firefox 85 for developers