Firefox 117 for developers
==========================

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

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

### HTML

No notable changes.

### CSS

* The CSS Nesting module is now supported in Firefox, along with the `&` nesting selector. This allows developers to write nested CSS, which helps with the readability, modularity, and maintainability of CSS stylesheets. It also potentially helps reduce CSS file size, decreasing download sizes. (Firefox bug 1835066, Firefox bug 1840781)
* The `math-style` and `math-depth` properties are now supported, as well as the `math` value for the `font-size` property (Firefox bug 1845516).
* The `contain-intrinsic-size: auto none` syntax is now supported, which allows for using the last-remembered size of an element if possible and falls back to `contain-intrinsic-size: none` otherwise.
 This is useful for grid and multi-column layouts to allow elements to be laid out as though they have no contents instead of 0px height (Firefox bug 1835813).
### JavaScript

No notable changes.

### SVG

* Inline SVGs now support `<script>` elements with `type="module"`, `defer`, and `async` attributes.
 This allows SVGs to use modern JavaScript features, including ES modules, and to load scripts asynchronously (Firefox bug 1839954).
### HTTP

* Fixed a bug where the Content-Security-Policy `'strict-dynamic'` source expression was not being enforced in `default-src` directives.
 The behavior now matches the specification where `default-src` directive values are used as a fallback when `script-src` is not provided (Firefox bug 1313937).
* The `Range` header is now a CORS-safelisted request header when the value is a single byte range (e.g., `bytes=100-200`).
 This allows the `Range` header to be used in cross-origin requests without triggering a preflight request, which is useful for requesting media and resuming downloads (Firefox bug 1733981).
### APIs

* The `CanvasRenderingContext2D.getContextAttributes()` method can now be used to get the 2D context attributes being used by the browser (Firefox bug 1517786).
* The `ReadableStream.from()` static member is now supported, allowing developers to construct a readable stream from any iterable or async iterable object (Firefox bug 1772772).
* WebRTC Encoded Transforms are now supported, allowing web applications to modify incoming and outgoing WebRTC encoded video and audio frames using a `TransformStream` running in a worker.
 The supported interfaces include: `RTCRtpScriptTransform`, `RTCRtpScriptTransformer`, `RTCRtpSender.transform`, `RTCRtpReceiver.transform`, `RTCEncodedVideoFrame`, and `RTCEncodedAudioFrame`, and the `RTCTransformEvent` and worker `rtctransform` event (Firefox bug 1631263).
* `CSSStyleRule` now inherits from `CSSGroupingRule` instead of directly from `CSSRule`. As a result, it additionally implements the property `cssRules` and the methods `deleteRule()` and `insertRule()` (Firefox bug 1846251).
### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Added the `browser.close` command that allows users to terminate all WebDriver sessions and close the browser (Firefox bug 1829334).
* Added the `browsingContext.setViewport` command that allows users to change the dimensions of a top level browsing context (Firefox bug 1838664).
* Added the `browsingContext.fragmentNavigated` event which is emitted for same-document navigations (Firefox bug 1841039).
* Added support for the `background` argument of the `browsingContext.create` command, which will force the new context to be created in the background. This argument is optional and defaults to `false`, meaning that `browsingContext.create` now opens new contexts in the foreground by default (Firefox bug 1843507).
* Added support for the `clip` argument of the `browsingContext.captureScreenshot` command, which allows to restrict the screenshot either to a specific area or to an element. When clipping to an element, you can optionally scroll the element into view before taking the screenshot (Firefox bug 1840998).
* All commands and events related to a navigation will now provide a `navigation` id, which is a `UUID` identifying a specific navigation. This property is available in the `browsingContext.navigate` response, in the `browsingContext.load`, `browsingContext.domContentLoaded`, `browsingContext.fragmentNavigated` events, as well as in all `network` events created for a navigation request (Firefox bug 1763122, Firefox bug 1789484, Firefox bug 1805405).
* `headers` and `cookies` in `network` events are now serialized as `network.BytesValue`, which will provide a better support for non-UTF8 values (Firefox bug 1842619).
* The `browsingContext.create` command will now wait until the created context has a valid size (Firefox bug 1847044).
### Developer tools

* The Network Monitor now shows information about proxied requests, including the proxy address, the proxy status, and the proxy HTTP version in the Headers tab (Firefox bug 1707192).
* The area selected by the Measuring Tool can now be resized and moved using keyboard shortcuts.
 Pressing the arrow keys moves the selected area, while pressing `Ctrl` + arrow keys (or `Cmd` + arrow keys on a Mac) resizes the selected area.
 Holding down the `Shift` key accelerates the moving and resizing actions when using these key combinations (Firefox bug 1262782).
* Properties that are not supported in highlight pseudo-elements (`::highlight()`, `::target-text`, `::spelling-error`, `::grammar-error`, and `::selection`) are now reported in the Page Inspector CSS rules panel (Firefox bug 1842157).
Changes for add-on developers
-----------------------------

No notable changes.

Older versions
--------------

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