Firefox 87 for developers
=========================

This article provides information about the changes in Firefox 87 that will affect developers. Firefox 87 was released on March 23, 2021.

**Note:** See also In March, we see Firefox 87 on Mozilla Hacks.

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

### Developer Tools

* Developers can now use the Page Inspector to simulate `prefers-color-scheme` media queries, without having to change the operating system to light or dark mode (Firefox bug 1679408 and Firefox bug 1692272).
* Developers can now use the Page Inspector to toggle the `:target` pseudo-class for the currently selected element in addition to the pseudo-classes that were previously supported: `:hover`, `:active` and `:focus`, `:focus-within`, `:focus-visible`, and `:visited` (Firefox bug 1689899).
* Firefox 87 sees a number of Page Inspector improvements and bug fixes related to inactive CSS rules:
    + The `table-layout` property is now marked as inactive for non-table elements (Firefox bug 1551571).
    + The `scroll-padding` properties (shorthand and longhand) are now marked as inactive for non-scrollable elements (Firefox bug 1551577).
    + The `text-overflow` property was previously incorrectly marked as inactive for some `overflow` values (Firefox bug 1671457).
### HTML

*No changes.*

### CSS

* Some languages have digraphs that are always capitalized together, for example `IJ` in Dutch. The `::first-letter` pseudo-element now respects these digraphs and treats them as a single unit (Firefox bug 92176).
* The `<link>` element is no longer matched by `:link`, `:visited`, or `:any-link`. This aligns the behavior in Firefox to existing behavior in Chrome and to a recent spec change (Firefox bug 1687538).

#### Removals

* The following Firefox-specific theme-related media features have been disabled for use in web pages (Firefox bug 787521):
    + `-moz-mac-graphite-theme`
    + `-moz-mac-lion-theme`
    + `-moz-maemo-classic`
    + `-moz-windows-classic`
    + `-moz-windows-compositor`
    + `-moz-windows-default-theme`
    + `-moz-windows-theme`
    + `-moz-scrollbar-end-backward`
    + `-moz-scrollbar-end-forward`
    + `-moz-scrollbar-start-backward`
    + `-moz-scrollbar-start-forward`
    + `-moz-scrollbar-thumb-proportional`
    + `-moz-menubar-drag`
* The non-standard values of `caption-side` (`left`, `right`, `top-outside`, and `bottom-outside`) have been removed and placed behind the `layout.css.caption-side-non-standard.enabled` flag (Firefox bug 1688695).
### JavaScript

*No changes.*

### HTTP

* Some enterprise authentication services require that TLS client certificates be sent in CORS preflight requests. Users of these services can enable this (non-specification compliant) behavior using the `network.cors_preflight.allow_client_cert` preference (Firefox bug 1511151).
* The default `Referrer-Policy` has been changed to `strict-origin-when-cross-origin` (from `no-referrer-when-downgrade`), reducing the risk of leaking referrer information in cross-origin requests (Firefox bug 1589074).
* `Content-Length` has been added to the list of CORS-safelisted response headers (Firefox bug 1460299).
### Security

*No changes.*

### APIs

#### DOM

* The `beforeinput` event and `getTargetRanges()` method are now enabled by default. They allow web apps to override text edit behavior before the browser modifies the DOM tree, and provide more control over input events to improve performance. The global `beforeinput` event is sent to an `<input>` element — or any element whose `contenteditable` attribute is set to `true` — immediately before the element's value changes. The `getTargetRanges()` method of the `InputEvent` interface returns an array of static ranges that will be affected by a change to the DOM if the input event is not canceled.
### WebDriver conformance (Marionette)

* The work of rewriting Marionette to support Fission (site-isolation) has been finished, so the old Marionette implementation has been removed. The `marionette.actors.enabled` preference, which toggled between the new and old implementations, has therefore also been removed (Firefox bug 1669172).
* WebDriver commands following a call to `WebDriver:SwitchToFrame` will no longer fail with a "no such window" error if the frame's content hasn't yet finished loading (Firefox bug 1691348).
* After a cross-group page navigation, accessing a previously-retrieved element will now always raise a "stale element" error; there is no longer a chance that this action will lead to a "no such element" error (Firefox bug 1690308).
* `Addon:Uninstall` now raises an `unknown error` when the id of the add-on to uninstall is unknown (Firefox bug 1693022).
Changes for add-on developers
-----------------------------

* nativeMessaging is now an optional permission (Firefox bug 1630415).
* Added support for querying and setting color management related features with `browserSettings.colorManagement` (Firefox bug 1719688) and (Firefox bug 1714428).
Older versions
--------------

* 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
* Firefox 58 for developers
* Firefox 57 for developers
* Firefox 56 for developers