Firefox 75 for developers
=========================

This article provides information about the changes in Firefox 75 that will affect developers. Firefox 75 was released on April 7, 2020.

**See also the accompanying hacks post — Firefox 75: Ambitions for April.**

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

### Developer tools

* It is now possible to resize the rectangle of the Measuring Tool (Firefox bug 1152321).
* In the inspector, you can now use XPath expressions to locate elements, in addition to locating elements using CSS selectors as before (Firefox bug 963933).
* You can now filter WebSocket messages using regular expressions, in addition to plain text search, by writing the regular expression in slashes (Firefox bug 1593837).
### HTML

* The `loading` attribute of the `<img>` element has now been implemented. This string value can be used to specify that the image should be lazily loaded, by setting its value to `lazy` (Firefox bug 1542784).
* The value of the `<style>` element's `type` attribute is now restricted to `text/css` only, as per the spec (Firefox bug 1614329).
### CSS

* Support for the `min()`, `max()`, and `clamp()` functions has been implemented (Firefox bug 1519519).
* The `all` value of the `text-decoration-skip-ink` property has been added (Firefox bug 1611965)
### Accessibility

The new roles and objects related to ARIA annotations are now exposed in Firefox, on Windows and Linux (bear in mind that these still won't be usable until screen readers start to support them):

* `aria-description` (Firefox bug 1608961).
* `role="mark"` and `role="suggestion"` (Firefox bug 1608965).
* `role="comment"` (Firefox bug 1608969).
* Multiple IDs on `aria-details` (Firefox bug 1608883).

**Note:** On macOS, we are first waiting for Apple to define what Safari will expose as Apple-dialect attributes to VoiceOver, and will then follow suit.

### JavaScript

* Public static class fields are now supported (Firefox bug 1535804).
* The `Intl.Locale` class is now supported (Firefox bug 1613713).
* The `Function.caller` property has been updated to be aligned with the latest ECMAScript spec proposal. Previously throwing a `TypeError`, it now returns `null` if the caller is a strict, async, or generator function (Firefox bug 1610206).
### APIs

#### DOM

* The `HTMLFormElement` interface has a new method, `requestSubmit()`. Unlike the old (and still available) `submit()` method, `requestSubmit()` acts as if a specified submit button has been clicked, rather than just sending the form data to the recipient. Thus the `submit` event is delivered and the form is checked for validity prior to the data being submitted (Firefox bug 1613360).
* The `submit` event is now represented by an object of type `SubmitEvent` rather than a simple `Event`. `SubmitEvent` includes a new `submitter` property, which is the `Element` that was invoked to trigger the form submission. With this event, you can have a single handler for submit events that can discern which of multiple submit buttons or links was used to submit the form (Firefox bug 1588715).
* Calling the `click()` method on a detached element (one not part of a DOM tree) now functions normally, leading to a `click` event being sent to it (Firefox bug 1610821).

#### Web animations API

Firefox 75 sees numerous additions to the Web Animations API:

* Implicit to/from keyframes are now supported, as is automatically removing filling animations that have been replaced by other indefinitely filling animations (Firefox bug 1618773). This includes enabling of support for:
    + `Animation.commitStyles()`
    + `Animation.onremove`
    + `Animation.persist()`
    + `Animation.replaceState`
* The `Animation.timeline` getter, `Document.timeline`, `DocumentTimeline`, and `AnimationTimeline` features are now enabled by default (Firefox bug 1619178).
* The `Document.getAnimations()` and `Element.getAnimations()` methods are now enabled by default (Firefox bug 1619821).

#### Media, Web Audio, and WebRTC

* The `RTCPeerConnection.setLocalDescription()` method can now be called without arguments, in which case the WebRTC runtime will try to create the new local session description itself (Firefox bug 1568292).
### HTTP

*No changes.*

### Security

* CSP nonces from non-script sources, such as CSS selectors, and `.getAttribute("nonce")` calls, are now hidden. Instead, check the `.nonce` property to access nonces from scripts (Firefox bug 1374612).
### Plugins

*No changes.*

### WebDriver conformance (Marionette)

* Fixed a bug that always caused Marionette to initialize when Firefox starts-up. It has been limited to the command line argument and environment variable now (Firefox bug 1622012).
* Fixed `WebDriver:Print` to no longer add extra margins to the document (Firefox bug 1616932).
* Changed the preference value for `network.http.speculative-parallel-limit` to `0`, to no longer force-disable speculative connections (Firefox bug 1617869).
### Other

*No changes.*

Changes for add-on developers
-----------------------------

### API changes

* We've added some new settings in `browserSettings` (Firefox bug 1286953):
    + `browserSettings.zoomSiteSpecific` to control whether zooming is on a per-site or per-tab basis
    + `browserSettings.zoomFullPage` to control whether zoom is applied to the entire page or to text only.
* The name of the file used when saving a PDF with `tabs.saveAsPDF` can be specified using `toFileName` in the type `tabs.PageSettings`.(Firefox bug 1483590)
### Manifest changes

* The "privacy" permission is now optional. (Firefox bug 1618399)
Older versions
--------------

* 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
* Firefox 58 for developers
* Firefox 57 for developers
* Firefox 56 for developers
* Firefox 55 for developers
* Firefox 54 for developers
* Firefox 53 for developers
* Firefox 52 for developers
* Firefox 51 for developers
* Firefox 50 for developers
* Firefox 49 for developers
* Firefox 48 for developers
* Firefox 47 for developers
* Firefox 46 for developers
* Firefox 45 for developers
* Firefox 44 for developers