Firefox 90 for developers
=========================

This article provides information about the changes in Firefox 90 that will affect developers. Firefox 90 was released on July 13th, 2021.

**Note:** See also Getting lively with Firefox 90 on Mozilla Hacks.

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

### Developer Tools

* The response view now shows a preview for web fonts (Firefox bug 872078).
### HTML

* A fix to the way that form payloads are handled around newline normalization and escaping in multipart/formdata. This meets the updated specification, and matches other browser implementations. (Firefox bug 1686765).
* Firefox now sets an image's intrinsic size and resolution based on EXIF information (if present and self-consistent). This allows a server to, for example, send a low-quality placeholder image to speed up loading. It also enables a number of other use cases (Firefox bug 1680387).
### CSS

* `-webkit-image-set()` has been implemented as an alias of the standard `image/image-set()` function (Firefox bug 1709415).
### JavaScript

* Private class static and instance fields and methods are now supported by default (Firefox bug 1708235 and Firefox bug 1708236).
* The `in` operator can now be used to check if a class private method or field has been defined. This offers a more compact approach for handling potentially undefined features, as oppose to wrapping code in `try/catch` blocks (Firefox bug 1648090).
* Custom date/time formats specified as options to the `Intl.DateTimeFormat()` constructor can now include `dayPeriod` — a value indicating that the approximate time of day (e.g. "in the morning", "at night", etc.) should be included as a `narrow`, `short`, or `long` string (Firefox bug 1645115).
* The relative indexing method `at()` has been added to the `Array`, `String` and `TypedArray` global objects. (Firefox bug 1681371)
### HTTP

* The HTTP fetch metadata request headers (`Sec-Fetch-*`) are now supported. These headers provide servers with additional context about requests, including whether they are same-origin, cross-origin, same-site, or user-initiated, and where/how the requested data is to be used. This allows servers to mitigate against several types of cross-origin attacks (Firefox bug 1695911).

#### Removals

* FTP has now been removed from Firefox (Firefox bug 1574475). This follows deprecation in Firefox 88. Note that web extensions can still register themselves as FTP protocol handlers.
### APIs

#### DOM

* Support was added for the deprecated `WheelEvent` properties: `WheelEvent.wheelDelta`, `WheelEvent.wheelDeltaX`, and `WheelEvent.wheelDeltaY`. This allows Firefox to work with a small subset of pages that were broken by recent compatibility improvements to `WheelEvent` (Firefox bug 1708829).
* The `CanvasRenderingContext2D` interface of the `Canvas API` now provides a `createConicGradient()` method. This returns a `CanvasGradient` much like the existing `linear` and `radial` gradients, but allows a gradient to move around a point defined by coordinates. See Firefox bug 1627014 for more details.
* Support for the `matrix` protocol has been added and can now be passed into the `Navigator.registerProtocolHandler()` method as a valid scheme.
### WebDriver conformance (Marionette)

* Marionette now restricts to a single active WebDriver session (Firefox bug 1691047).
* Added support for the new type of user prompts in Firefox (Firefox bug 1686741)
* Window handles make use of a unique id now, and don't change for process
 swaps as caused by cross-group navigations (Firefox bug 1680479).
* Fixed an inappropriate abortion of the current WebDriver command when a
 new user prompt was opened in a background tab (Firefox bug 1701686).
* Fixed the `WebDriver:GetWindowHandles` command to now correctly
 handle unloaded tabs (Firefox bug 1682062).
* Fixed the `WebDriver:NewSession` command to always return the
 `proxy` capability even if empty (Firefox bug 1710935).

#### Removals

* With the removal of the FTP support in Firefox 90
 the `ftpProxy` capability is no longer evaluated, and when used will
 throw an `invalid argument` error (Firefox bug 1703805).
Changes for add-on developers
-----------------------------

* The `matrix` URI scheme is now supported and can be defined as a protocol within the `protocol_handlers` key in an extensions `manifest.json`
* Starting with this version, the Cache API can be used in the extension pages and worker globals. For more details, see (Firefox bug 1575625).
Older versions
--------------

* Firefox 89 for developers
* Firefox 88 for developers
* Firefox 87 for developers
* Firefox 86 for developers
* Firefox 85 for developers
* Firefox 84 for developers
* Firefox 83 for developers
* Firefox 82 for developers
* Firefox 81 for developers
* Firefox 80 for developers
* Firefox 79 for developers
* Firefox 78 for developers
* Firefox 77 for developers
* Firefox 76 for developers
* Firefox 75 for developers
* Firefox 74 for developers
* Firefox 73 for developers
* Firefox 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers
* Firefox 69 for developers
* Firefox 68 for developers
* Firefox 67 for developers
* Firefox 66 for developers
* Firefox 65 for developers
* Firefox 64 for developers
* Firefox 63 for developers
* Firefox 62 for developers
* Firefox 61 for developers
* Firefox 60 for developers
* Firefox 59 for developers