Experimental features in Firefox - Mozilla

Experimental features in Firefox
================================

 This page lists Firefox's experimental and partially implemented features, including those for proposed or cutting-edge web platform standards, along with information on the builds in which they are present, whether or not they are activated "by default", and which *preference* can be used to activate or deactivate them.
 This allows you to test the features before they are released.

 New features appear first in the Firefox Nightly build, where they are often enabled by default.
 They later propagate though to Firefox Developer Edition and eventually to the release build.
 After a feature is enabled by default in a release build, it is no longer considered experimental and should be removed from the topic.

Experimental features can be enabled or disabled using the Firefox Configuration Editor (enter `about:config` in the Firefox address bar) by modifying the associated *preference* listed below.

**Note:** For editors - when adding features to these tables, please try to include a link to the relevant bug or bugs using `[Firefox bug <number>](https://bugzil.la/<number>)`.

HTML
----

### Layout for input type="search"

Layout for `input type="search"` has been updated. This causes a search field to have a clear icon once someone starts typing in it, to match other browser implementations. (See Firefox bug 558594 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 81 | No |
| Developer Edition | 81 | No |
| Beta | 81 | No |
| Release | 81 | No |
| Preference name | `layout.forms.input-type-search.enabled` |

### Toggle password display

HTML password input elements (`<input type="password">`) include an "eye" icon that can be toggled to display or obscure the password text (Firefox bug 502258).

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 96 | No |
| Developer Edition | 96 | No |
| Beta | 96 | No |
| Release | 96 | No |
| Preference name | `layout.forms.input-type-show-password-button.enabled` |

### Declarative shadow DOM

The `<template>` element now supports a `shadowrootmode` attribute which can be set to either `open` or `closed`, the same values as the `mode` option of the `attachShadow()` method. It allows the creation of a shadow DOM subtree declaratively. (See Firefox bug 1712140 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 122 | Yes |
| Developer Edition | 122 | No |
| Beta | 122 | No |
| Release | 122 | No |
| Preference name | `dom.webcomponents.shadowdom.declarative.enabled` |

CSS
---

### Hex boxes to display stray control characters

This feature renders control characters (Unicode category Cc) other than *tab* (`U+0009`), *line feed* (`U+000A`), *form feed* (`U+000C`), and *carriage return* (`U+000D`) as a hexbox when they are not expected. (See Firefox bug 1099557 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 43 | Yes |
| Developer Edition | 43 | No |
| Beta | 43 | No |
| Release | 43 | No |
| Preference name | `layout.css.control-characters.enabled` or
 `layout.css.control-characters.visible` |

### initial-letter property

The `initial-letter` CSS property is part of the CSS Inline Layout specification and allows you to specify how dropped, raised, and sunken initial letters are displayed. (See Firefox bug 1223880 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 50 | No |
| Developer Edition | 50 | No |
| Beta | 50 | No |
| Release | 50 | No |
| Preference name | `layout.css.initial-letter.enabled` |

### content-visibility: auto value

 The `content-visibility` CSS property value `auto` allows content to skip rendering if it is not relevant to the user.
 (See Firefox bug 1798485 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 113 | Yes |
| Developer Edition | 109 | No |
| Beta | 109 | No |
| Release | 109 | No |
| Preference name | `layout.css.content-visibility.enabled` |

Note:

* The related `contentvisibilityautostatechange` event and associated `ContentVisibilityAutoStateChangeEvent` interface were added in version 110, and are gated by the same preference.
 These can be used by application code to monitor visibility changes and stop processes related to rendering the element when the user agent is skipping its contents.
 (See Firefox bug 1791759 for more details.)
* The `Element.checkVisibility()` `options` object parameter now takes the property `contentVisibilityAuto`, which can be set `true` to test if the element has `content-visibility: auto` set and is currently skipping rendering its content (the `options` object also takes new values `opacityProperty` and `visibilityProperty` but these are not related to `content-visibility`).
 (See Firefox bug 1859852 for more details).
### Single numbers as aspect ratio in media queries

Support for using a single `<number>` as a `<ratio>` when specifying the aspect ratio for a media query. (See Firefox bug 1565562 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 70 | No |
| Developer Edition | 70 | No |
| Beta | 70 | No |
| Release | 70 | No |
| Preference name | `layout.css.aspect-ratio-number.enabled` |

### backdrop-filter property

The `backdrop-filter` property applies filter effects to the area behind an element. (See Firefox bug 1178765 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 70 | No |
| Developer Edition | 70 | No |
| Beta | 70 | No |
| Release | 70 | No |
| Preference name | `layout.css.backdrop-filter.enabled` |

### Masonry grid layout

Adds support for a masonry-style layout based on grid layout where one axis has a masonry layout and the other has a normal grid layout. This allows developers to easily create gallery style layouts like on Pinterest. See Firefox bug 1607954 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 77 | Yes |
| Developer Edition | 77 | No |
| Beta | 77 | No |
| Release | 77 | No |
| Preference name | `layout.css.grid-template-masonry-value.enabled` |

### fit-content() function

The `fit-content()` function as it applies to `width` and other sizing properties. This function is already well-supported for CSS Grid Layout track sizing. (See Firefox bug 1312588 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 91 | No |
| Developer Edition | 91 | No |
| Beta | 91 | No |
| Release | 91 | No |
| Preference name | `layout.css.fit-content-function.enabled` |

### Scroll-driven animations

 Earlier called "scroll-linked animations", a scroll-driven animation depends on the scroll position of a scrollbar instead of time or some other dimension.
 The `scroll-timeline-name` and `scroll-timeline-axis` properties (and the `scroll-timeline` shorthand property) allow you to specify that a particular scrollbar in a particular named container can be used as the source for a scroll-driven animation.
 The scroll timeline can then be associated with an animation by setting the `animation-timeline` property to the name value defined using `scroll-timeline-name`.

When using the `scroll-timeline` shorthand property, the order of the property values must be `scroll-timeline-name` followed by `scroll-timeline-axis`. The longhand and shorthand properties are both available behind the preference.

You can alternatively use the `scroll()` functional notation with `animation-timeline` to indicate that a scrollbar axis in an ancestor element will be used for the timeline.

For more information, see Firefox bug 1807685, Firefox bug 1804573, Firefox bug 1809005, Firefox bug 1676791, Firefox bug 1754897, and Firefox bug 1737918.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 110 | No |
| Developer Edition | 110 | No |
| Beta | 110 | No |
| Release | 110 | No |
| Preference name | `layout.css.scroll-driven-animations.enabled` |

### @font-face src feature checking

 The `@font-face` `src` descriptor now supports the `tech()` function, allowing fallback of whether a font resource is downloaded based on whether the user-agent supports a particular font feature or technology.
 See Firefox bug 1715546 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 105 | Yes |
| Developer Edition | 105 | No |
| Beta | 105 | No |
| Release | 105 | No |
| Preference name | `layout.css.font-tech.enabled` |

### font-variant-emoji

 The CSS `font-variant-emoji` property allows you to set a default presentation style for displaying emojis.
 See (Firefox bug 1461589) for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 108 | Yes |
| Developer Edition | 108 | No |
| Beta | 108 | No |
| Release | 108 | No |
| Preference name | `layout.css.font-variant-emoji.enabled` |

### page-orientation

 The **`page-orientation`** CSS descriptor for the `@page` at-rule controls the rotation of a printed page. It handles the flow of content across pages when the orientation of a page is changed. This behavior differs from the `size` descriptor in that a user can define the direction in which to rotate the page.
 See (Firefox bug 1673987) for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 111 | Yes |
| Developer Edition | 111 | No |
| Beta | 111 | No |
| Release | 111 | No |
| Preference name | `layout.css.page-orientation.enabled` |

### prefers-reduced-transparency media feature

 The CSS `prefers-reduced-transparency` media feature lets you detect if a user has enabled the setting to minimize the amount of transparent or translucent layer effects on their device.
 See (Firefox bug 1736914) for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 113 | No |
| Developer Edition | 113 | No |
| Beta | 113 | No |
| Release | 113 | No |
| Preference name | `layout.css.prefers-reduced-transparency.enabled` |

### inverted-colors media feature

 The CSS `inverted-colors` media feature lets you detect if a user agent or the underlying operating system is inverting colors.
 See (Firefox bug 1794628) for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 114 | No |
| Developer Edition | 114 | No |
| Beta | 114 | No |
| Release | 114 | No |
| Preference name | `layout.css.inverted-colors.enabled` |

### Named view progress timelines property

 The CSS `view-timeline-name` property lets you give a name to particular element, identifying that its ancestor scroller element is the source of a view progress timeline.
 The name can then be assigned to the `animation-timeline`, which then animates the associated element as it moves through the visible area of its ancestor scroller.
 See (Firefox bug 1737920) for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 114 | No |
| Developer Edition | 114 | No |
| Beta | 114 | No |
| Release | 114 | No |
| Preference name | `layout.css.scroll-driven-animations.enabled` |

### Anonymous view progress timelines function

 The CSS `view()` function lets you specify that the `animation-timeline` for an element is a view progress timeline, which will animate the element as it moves through the visible area of its ancestor scroller.
 The function defines the axis of the parent element that supplies the timeline, along with the inset within the visible area at which the animation starts and begins.
 See (Firefox bug 1808410) for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 114 | No |
| Developer Edition | 114 | No |
| Beta | 114 | No |
| Release | 114 | No |
| Preference name | `layout.css.scroll-driven-animations.enabled` |

### zoom property

 The non-standard CSS `zoom` property is enabled in the Nightly release and lets you magnify an element similar to the `transform` property, but it affects the layout size of the element.
 See (Firefox bug 1855763 and Firefox bug 390936) for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 120 | Yes |
| Developer Edition | 120 | No |
| Beta | 120 | No |
| Release | 120 | No |
| Preference name | `layout.css.zoom.enabled` |

 To ensure compatibility with these changes, the Vendor-prefixed transform properties and the Vendor-prefixed transition properties are disabled in the Nightly release.
 These changes are described in the following sections.

### text-wrap: balance & stable values

 The `text-wrap` CSS property values `balance` and `stable` allow the layout of short content to be wrapped in a balanced manner and for editable content to not reflow while the user is editing it, respectively.
 (See Firefox bug 1731541 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 120 | Yes |
| Developer Edition | 120 | No |
| Beta | 120 | No |
| Release | 120 | No |
| Preference name | `layout.css.text-wrap-balance.enabled, layout.css.text-wrap-balance.limit, layout.css.text-wrap-balance-after-clamp.enabled` |

#### Vendor-prefixed transform properties

 The `-moz-` prefixed CSS transform properties have been disabled in the Nightly release via the `layout.css.prefixes.transforms` preference being set to `false` (Firefox bug 1855763).
 Specifically, the disabled properties are:

* `-moz-backface-visibility`
* `-moz-perspective`
* `-moz-perspective-origin`
* `-moz-transform`
* `-moz-transform-origin`
* `-moz-transform-style`

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 120 | No |
| Developer Edition | 120 | Yes |
| Beta | 120 | Yes |
| Release | 120 | Yes |
| Preference name | `layout.css.prefixes.transforms` |

#### Vendor-prefixed transition properties

 The `-moz-` prefixed CSS transitions properties have been disabled in the Nightly release via the `layout.css.prefixes.transitions` preference being set to `false` (Firefox bug 1855763).
 Specifically, the disabled properties are:

* `-moz-transition`
* `-moz-transition-delay`
* `-moz-transition-duration`
* `-moz-transition-property`
* `-moz-transition-timing-function`

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 120 | No |
| Developer Edition | 120 | Yes |
| Beta | 120 | Yes |
| Release | 120 | Yes |
| Preference name | `layout.css.prefixes.transitions` |

SVG
---

### SVGPathSeg APIs

 The SVGPathSeg APIs are being unshipped, and have been placed behind a preference.
 This includes: `SVGPathSegList`, SVGPathElement.getPathSegAtLength(), `SVGAnimatedPathData`.
 (See Firefox bug 1388931 for more details.)

| Release channel | Version removed | Enabled by default? |
| --- | --- | --- |
| Nightly | 97 | No |
| Developer Edition | 97 | No |
| Beta | 97 | No |
| Release | 97 | No |
| Preference name | `dom.svg.pathSeg.enabled` |

JavaScript
----------

### Intl.Segmenter

 The `Intl.Segmenter` is supported in nightly builds, allowing developers to perform locale-sensitive text segmentation.
 This enables splitting a string into meaningful items (graphemes, words or sentences) in different locales.
 (See Firefox bug 1423593 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 122 | Yes |
| Developer Edition | NA | No |
| Beta | NA | No |
| Release | NA | No |
| Preference name | None |

APIs
----

### Graphics: Canvas, WebGL, and WebGPU

#### Hit regions

Whether the mouse coordinates are within a particular area on the canvas is a common problem to solve. The hit region API allows you to define an area of your canvas and provides another possibility to expose interactive content on a canvas to accessibility tools.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 30 | No |
| Developer Edition | 30 | No |
| Beta | 30 | No |
| Release | 30 | No |
| Preference name | `canvas.hitregions.enabled` |

#### WebGL: Draft extensions

When this preference is enabled, any WebGL extensions currently in "draft" status which are being tested are enabled for use. Currently, there are no WebGL extensions being tested by Firefox.

#### WebGPU API

The WebGPU API provides low-level support for performing computation and graphics rendering using the Graphics Processing Unit (GPU) of the user's device or computer. See Firefox bug 1602129 for our progress on this API.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 113 | Yes |
| Developer Edition | 73 | No |
| Beta | 73 | No |
| Release | 73 | No |
| Preference name | `dom.webgpu.enabled` |

### WebRTC and media

The following experimental features include those found in the WebRTC API, the Web Audio API, the Media Source Extensions API, the Encrypted Media Extensions API, and the Media Capture and Streams API.

#### Asynchronous SourceBuffer add and remove

This adds the promise-based methods `appendBufferAsync()` and `removeAsync()` for adding and removing media source buffers to the `SourceBuffer` interface. See Firefox bug 1280613 and Firefox bug 778617 for more information.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 62 | No |
| Developer Edition | 62 | No |
| Beta | 62 | No |
| Release | 62 | No |
| Preference name | `media.mediasource.experimental.enabled` |

#### AVIF compliance strictness

 The `image.avif.compliance_strictness` preference can be used to control the *strictness* applied when processing AVIF images.
 This allows Firefox users to display images that render on some other browsers, even if they are not strictly compliant.

Permitted values are:

* `0`: Accept images with specification violations in both recommendations ("should" language) and requirements ("shall" language), provided they can be safely or unambiguously interpreted.
* `1` (default): Reject violations of requirements, but allow violations of recommendations.
* `2`: Strict. Reject any violations in requirements or recommendations.

| Release channel | Version added | Default value |
| --- | --- | --- |
| Nightly | 92 | 1 |
| Developer Edition | 92 | 1 |
| Beta | 92 | 1 |
| Release | 92 | 1 |
| Preference name | `image.avif.compliance_strictness` |

#### JPEG XL support

 Firefox supports JPEG XL images if this feature is enabled.
 See Firefox bug 1539075 for more details.

Note that, as shown below, the feature is only available on Nightly builds (irrespective of whether the preference is set).

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 90 | No |
| Developer Edition | — | — |
| Beta | — | — |
| Release | — | — |
| Preference name | `image.jxl.enabled` |

#### OpenFont COLRv1 fonts

 This feature provides support for the OpenFont COLRv1 font specification.
 This enables compression-friendly color vector fonts with gradients, compositing and blending to be loaded using the CSS `@font-face` rule, or the CSS Font Loading API.
 See Firefox bug 1740530 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 105 | No |
| Developer Edition | 105 | No |
| Beta | 105 | No |
| Release | 105 | No |
| Preference name | `gfx.font_rendering.colr_v1.enabled` |

#### CSS Properties and Values API

 The CSS Properties and Values API allows developers to register custom CSS properties through JavaScript via `registerProperty()` or in CSS using the `@property` at-rule.
 Registering properties using these two methods allows for type checking, default values, and properties that do or do not inherit values from their parent elements.
 See Firefox bug 1840480 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 116 | Yes |
| Developer Edition | 116 | No |
| Beta | 116 | No |
| Release | 116 | No |
| Preference name | `layout.css.property-and-value-api.enabled` |

#### CSS Custom Highlight API

 The CSS Custom Highlight API provides a mechanism for styling arbitrary text ranges in a document (generalizing the behavior of other highlight pseudo-elements such as `::selection`, `::spelling-error`, `::grammar-error`, and `::target-text`).
 The ranges are defined in JavaScript using `Range` instances grouped in a `Highlight`, and then registered with a name using `HighlightRegistry`.
 The CSS `::highlight` pseudo-element is used to apply styles to a registered highlight.
 See Firefox bug 1703961 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 117 | Yes |
| Developer Edition | 117 | No |
| Beta | 117 | No |
| Release | 117 | No |
| Preference name | `dom.customHighlightAPI.enabled` |

### Service Workers

#### Preloading of service worker resources on navigation

 The `NavigationPreloadManager` interface can be used to enable preloading of resources when navigating to a page.
 Preloading occurs in parallel with worker bootup, reducing the total time from start of navigation until resources are fetched.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 99 | yes |
| Developer Edition | 97 | No |
| Beta | 97 | No |
| Release | 97 | No |
| Preference name | `dom.serviceWorkers.navigationPreload.enabled` |

### WebVR API

#### WebVR API (Disabled)

 The deprecated WebVR API is on the path for removal.
 It is disabled by default on all builds Firefox bug 1750902.

| Release channel | Version removed | Enabled by default? |
| --- | --- | --- |
| Nightly | 98 | No |
| Developer Edition | 98 | No |
| Beta | 98 | No |
| Release | 98 | No |
| Preference name | `dom.vr.enabled` |

### HTML DOM API

#### Popover API

Firefox now supports the Popover API.

The following Web APIs are now implemented:

* `HTMLButtonElement.popoverTargetElement` and `HTMLButtonElement.popoverTargetAction`.
* `HTMLInputElement.popoverTargetElement` and `HTMLInputElement.popoverTargetAction`.
* `HTMLElement.popover`, `HTMLElement.hidePopover()`, `HTMLElement.showPopover()`, and `HTMLElement.togglePopover()`.
* `HTMLElement` `beforetoggle` event, `HTMLElement` `toggle_event` event, and `ToggleEvent`.

CSS updates include:

* `:popover-open`
* `::backdrop` has been extended to support popovers

The following HTML global attributes are supported:

* `popovertarget`
* `popovertargetaction`

See Firefox bug 1823757 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 122 | Yes |
| Developer Edition | 114 | No |
| Beta | 114 | No |
| Release | 114 | No |
| Preference name | `dom.element.popover.enabled` |

#### HTMLMediaElement method: setSinkId()

`HTMLMediaElement.setSinkId()` allows you to set the sink ID of an audio output device on an `HTMLMediaElement`, thereby changing where the audio is being output. See Firefox bug 934425 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 64 | No |
| Developer Edition | 64 | No |
| Beta | 64 | No |
| Release | 64 | No |
| Preference name | `media.setsinkid.enabled` |

#### HTMLMediaElement properties: audioTracks and videoTracks

Enabling this feature adds the `HTMLMediaElement.audioTracks` and `HTMLMediaElement.videoTracks` properties to all HTML media elements. However, because Firefox doesn't currently support multiple audio and video tracks, the most common use cases for these properties don't work, so they're both disabled by default. See Firefox bug 1057233 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 33 | No |
| Developer Edition | 33 | No |
| Beta | 33 | No |
| Release | 33 | No |
| Preference name | `media.track.enabled` |

#### ClipboardItem

 The `ClipboardItem` interface of the `Clipboard API` is now supported. It is available in nightly or early beta builds.
 (See Firefox bug 1809106 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 122 | Yes |
| Developer Edition | 87 | No |
| Beta | 122 | Yes |
| Release | 87 | No |
| Preference name | `dom.events.asyncClipboard.clipboardItem` |

#### Clipboard read and write

 The Clipboard.read(), Clipboard.readText(), and Clipboard.write() methods of the `Clipboard` interface are now available in nightly and early beta builds
 (See Firefox bug 1809106 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 122 | Yes |
| Developer Edition | 90 | No |
| Beta | Yes | No |
| Release | 90 | No |
| Preference name | `dom.events.asyncClipboard.readText` and `dom.events.asyncClipboard.clipboardItem` |

#### HTML Sanitizer API

The `HTML Sanitizer API` allow developers to take untrusted strings of HTML and sanitize them for safe insertion into a document's DOM. Default elements within each configuration property (those to be sanitized) are still under consideration. Due to this the config parameter has not been implemented (see `the constructor` for more information). See Firefox bug 1673309 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 84 | No |
| Developer Edition | 84 | No |
| Beta | 84 | No |
| Release | 84 | No |
| Preference name | `dom.security.sanitizer.enabled` |

#### GeometryUtils methods: convertPointFromNode(), convertRectFromNode(), and convertQuadFromNode()

The `GeometryUtils` methods `convertPointFromNode()`, `convertRectFromNode()`, and `convertQuadFromNode()` map the given point, rectangle, or quadruple from the `Node` on which they're called to another node. (See Firefox bug 918189 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 31 | Yes |
| Developer Edition | 31 | No |
| Beta | 31 | No |
| Release | 31 | No |
| Preference name | `layout.css.convertFromNode.enable` |

#### GeometryUtils method: getBoxQuads()

The `GeometryUtils` method `getBoxQuads()` returns the CSS boxes for a `Node` relative to any other node or viewport. (See Firefox bug 917755 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 31 | Yes |
| Developer Edition | 31 | No |
| Beta | 31 | No |
| Release | 31 | No |
| Preference name | `layout.css.getBoxQuads.enabled` |

#### Custom element state pseudo-class

 Custom elements can expose their internal state via the `states` property as a `CustomStateSet`. A CSS custom state pseudo-class such as `:--somestate` can match that element's state.
 (See Firefox bug 1861466 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 121 | No |
| Developer Edition | 121 | No |
| Beta | 121 | No |
| Release | 121 | No |
| Preference name | `dom.element.customstateset.enabled` |

### Payment Request API

#### Primary payment handling

The Payment Request API provides support for handling web-based payments within web content or apps. Due to a bug that came up during testing of the user interface, we have decided to postpone shipping this API while discussions over potential changes to the API are held. Work is ongoing. (See Firefox bug 1318984 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 55 | No |
| Developer Edition | 55 | No |
| Beta | 55 | No |
| Release | 55 | No |
| Preference name | `dom.payments.request.enabled` and`dom.payments.request.supportedRegions` |

### WebShare API

 The Web Share API allows sharing of files, URLs and other data from a site.
 This feature is enabled on Android in all builds, but behind a preference on Desktop (unless specified below).

| Release channel | Version changed | Enabled by default? |
| --- | --- | --- |
| Nightly | 71 | No (default). Yes (Windows from version 92) |
| Developer Edition | 71 | No |
| Beta | 71 | No |
| Release | 71 | No (Desktop). Yes (Android). |
| Preference name | `dom.webshare.enabled` |

### Screen Orientation API

#### ScreenOrientation.lock()

 The `ScreenOrientation.lock()` method allows a device to be locked to a particular orientation, if supported by the device and allowed by browser pre-lock requirements.
 Typically locking the orientation is only allowed on mobile devices when the document is being displayed full screen.
 See Firefox bug 1697647 for more details.

| Release channel | Version changed | Enabled by default? |
| --- | --- | --- |
| Nightly | 111 | Yes |
| Developer Edition | 97 | No |
| Beta | 97 | No |
| Release | 97 | No |
| Preference name | `dom.screenorientation.allow-lock` |

### Screen Wake Lock API

 The Screen Wake Lock API allows a web application to request that the screen not be dimmed or locked while it is active.
 This is useful for navigation and reading applications, and any application where the screen doesn't get regular tactile input while the application is in use (the default way to keep a screen awake).
 The API is accessed through `Navigator.wakeLock` in secure contexts, which returns a `WakeLock`.
 This can be used to request a `WakeLockSentinel` that can be used to monitor the status of the wake lock, and release it manually.
 See Firefox bug 1589554 for more details.

| Release channel | Version changed | Enabled by default? |
| --- | --- | --- |
| Nightly | 122 | Yes |
| Developer Edition | 122 | No |
| Beta | 122 | No |
| Release | 122 | No |
| Preference name | `dom.screenwakelock.enabled` |

### Prioritized Task Scheduling API

The Prioritized Task Scheduling API provides a standardized way to prioritize all tasks belonging to an application, whether they defined in a website developer's code, or in third party libraries and frameworks.

 This is enabled on Firefox Nightly (only) from Firefox 101.
 No preference is provided to allow it to be enabled in other releases.

### Notifications API

Notifications have the `requireInteraction` property set to true by default on Windows systems and in the Nightly release (Firefox bug 1794475).

| Release channel | Version changed | Enabled by default? |
| --- | --- | --- |
| Nightly | 117 | Yes |
| Developer Edition | 117 | No |
| Beta | 117 | No |
| Release | 117 | Windows only |
| Preference name | `dom.webnotifications.requireinteraction.enabled` |

Security and privacy
--------------------

### Block plain text requests from Flash on encrypted pages

In order to help mitigate man-in-the-middle (MitM) attacks caused by Flash content on encrypted pages, a preference has been added to treat `OBJECT_SUBREQUEST`s as active content. See Firefox bug 1190623 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 59 | No |
| Developer Edition | 59 | No |
| Beta | 59 | No |
| Release | 59 | No |
| Preference name | `security.mixed_content.block_object_subrequest` |

### Insecure page labeling

These two preferences add a "Not secure" text label in the address bar next to the traditional lock icon when a page is loaded insecurely (that is, using HTTP rather than HTTPS). See Firefox bug 1335970 for more details.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 60 | No |
| Developer Edition | 60 | No |
| Beta | 60 | No |
| Release | 60 | No |
| Preference name | `security.insecure_connection_text.enabled` for normal
 browsing mode;
 `security.insecure_connection_text.pbmode.enabled` for
 private browsing mode
  |

### Upgrading mixed display content

When enabled, this preference causes Firefox to automatically upgrade requests for media content from HTTP to HTTPS on secure pages. The intent is to prevent mixed-content conditions in which some content is loaded securely while other content is insecure. If the upgrade fails (because the media's host doesn't support HTTPS), the media is not loaded. (See Firefox bug 1435733 for more details.)

This also changes the console warning; if the upgrade succeeds, the message indicates that the request was upgraded, instead of showing a warning.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 84 | Yes |
| Developer Edition | 60 | No |
| Beta | 60 | No |
| Release | 60 | No |
| Preference name | `security.mixed_content.upgrade_display_content` |

### Permissions Policy / Feature policy

Permissions Policy allows web developers to selectively enable, disable, and modify the behavior of certain features and APIs in the browser. It is similar to CSP but controls features instead of security behavior.
 This is implemented in Firefox as **Feature Policy**, the name used in an earlier version of the specification.

Note that supported policies can be set through the `allow` attribute on `<iframe>` elements even if the user preference is not set.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 65 | No |
| Developer Edition | 65 | No |
| Beta | 65 | No |
| Release | 65 | No |
| Preference name | `dom.security.featurePolicy.header.enabled` |

### Clear-Site-Data "cache" directive

The `Clear-Site-Data` HTTP response header `cache` directive clears the browser cache for the requesting website.

**Note:** This was originally enabled by default, but put behind a preference in version 94 (Firefox bug 1729291).

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 63 | No |
| Developer Edition | 63 | No |
| Beta | 63 | No |
| Release | 63 | No |
| Preference name | `privacy.clearsitedata.cache.enabled` |

HTTP
----

### SameSite=Lax by default

`SameSite` cookies have a default value of `Lax`.
 With this setting, cookies are only sent when a user is navigating to the origin site, not for cross-site subrequests to load images or frames into a third party site and so on.
 For more details see Firefox bug 1617609.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 69 | No |
| Developer Edition | 69 | No |
| Beta | 69 | No |
| Release | 69 | No |
| Preference name | `network.cookie.sameSite.laxByDefault` |

### HTTP Status 103

 The `103 Early Hints` HTTP information response status code may be sent by a server to allow a user agent to start preloading resources while the server is still preparing the full response.
 Note that using the header to preconnect to sites is already supported.
 For more details see Firefox bug 1813035.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 111 | Yes |
| Developer Edition | 111 | Yes |
| Beta | 111 | Yes |
| Release | 102 | No |
| Preference name | `network.early-hints.enabled` |

### Access-Control-Allow-Headers wildcard does not cover Authorization

 The `Access-Control-Allow-Headers` is a response header to a CORS preflight request, that indicates which request headers may be included in the final request.
 The response directive can contain a wildcard (`*`), which indicates that the final request may include all headers except the `Authorization` header.

 By default, Firefox includes the `Authorization` header in the final request after receiving a response with `Access-Control-Allow-Headers: *`.
 Set the preference to `false` to ensure Firefox does not include the `Authorization` header.
 For more details see Firefox bug 1687364.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 115 | Yes |
| Developer Edition | 115 | Yes |
| Beta | 115 | Yes |
| Release | 115 | Yes |
| Preference name | `network.cors_preflight.authorization_covered_by_wildcard` |

Developer tools
---------------

Mozilla's developer tools are constantly evolving. We experiment with new ideas, add new features, and test them on the Nightly and Developer Edition channels before letting them go through to beta and release. The features below are the current crop of experimental developer tool features.

### Execution context selector

This feature displays a button on the console's command line that lets you change the context in which the expression you enter will be executed. (See Firefox bug 1605154 and Firefox bug 1605153 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 75 | No |
| Developer Edition | 75 | No |
| Beta | 75 | No |
| Release | 75 | No |
| Preference name | `devtools.webconsole.input.context` |

### Mobile gesture support in Responsive Design Mode

Mouse gestures are used to simulate mobile gestures like swiping/scrolling, double-tap and pinch-zooming and long-press to select/open the context menu. (See Firefox bug 1621781, Firefox bug 1245183, and Firefox bug 1401304 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 76[1] | Yes |
| Developer Edition | 76[1] | Yes |
| Beta | 76[1] | Yes |
| Release | 76[1] | No |
| Preference name | n/a |

[1] Support for zooming using the double-tap gesture was added in Firefox 76. The other gestures were added for Firefox 79.

### Server-sent events in Network Monitor

The Network Monitor displays information for server-sent events. (See Firefox bug 1405706 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 80 | Yes |
| Developer Edition | 80 | Yes |
| Beta | 80 | No |
| Release | 80 | No |
| Preference name | `devtools.netmonitor.features.serverSentEvents` |

### CSS browser compatibility tooltips

The CSS Rules View can display browser compatibility tooltips next to any CSS properties that have known issues. For more information see: Examine and edit HTML > Browser Compat Warnings.

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 81 | No |
| Developer Edition | 81 | No |
| Beta | 81 | No |
| Release | 81 | No |
| Preference name | `devtools.inspector.ruleview.inline-compatibility-warning.enabled` |

UI
--

### Desktop zooming

This feature lets you enable smooth pinch zooming on desktop computers without requiring layout reflows, just like mobile devices do. (See Firefox bug 1245183 and Firefox bug 1620055 for more details.)

| Release channel | Version added | Enabled by default? |
| --- | --- | --- |
| Nightly | 42 | Yes |
| Developer Edition | 42 | No |
| Beta | 42 | No |
| Release | 42 | No |
| Preference name | `apz.allow_zooming` and (on Windows)
 `apz.windows.use_direct_manipulation` |

See also
--------

* Firefox developer release notes
* Firefox Nightly
* Firefox Developer Edition


Firefox 26 for developers - Mozilla

Firefox 26 for developers
=========================

Firefox 26 was released on December 10, 2013. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.

Changes for Web developers
--------------------------

### CSS

* The `text-decoration-line` property, still prefixed, now considers `'blink'` as a valid value, though it doesn't blink the content at all (Firefox bug 812995).
* The non-standard `-moz-text-blink` property has been removed (Firefox bug 812995).
* Support for the `image-orientation` property, in its CSS Images & Values Level 4 version, that is with the `from-image` keyword and EXIF support, has been added (Firefox bug 825771).
* Experimental support for `position: sticky` has been implemented and can be enabled by pref `layout.css.sticky.enabled` (Firefox bug 886646).
* The `text-align` property now applies to the `::-moz-placeholder` pseudo-element (Firefox bug 915551).
### HTML

* The `HTMLSelectElement.selectedOptions` property has been implemented (Firefox bug 596681).
* In the `<input>` element of type `email`, values with domain labels longer than 63 chars are no more considered valid (Firefox bug 884332).
* The `HTMLInputElement.width` and `height` properties now return `0` when the `type` is not `image` (Firefox bug 905240).
* A `<fieldset>` element is now invalid, and can be styled using the `:invalid` pseudo-class, when one of the elements it contains is invalid (Firefox bug 717181).
### JavaScript

ECMAScript 2015 implementation continues!

* The ECMAScript 2015 compliant syntax for Generators (yield) has been implemented (Firefox bug 666399).
* Generator/Iterator results are now boxed like `{ value: foo, done: bool }` (Firefox bug 907744).
* New mathematical methods have been implemented on `Math`: `Math.fround()` (Firefox bug 900125).
* The reserved words cannot be used for function names:such a usage now throws a `SyntaxError` (Firefox bug 907958).
* The default parameter syntax has been updated to allow parameters without defaults after default parameters, such as `function f(x=1, y)`. See Firefox bug 777060.
* `GeneratorFunction` is implemented (Firefox bug 904701).
### Interfaces/APIs/DOM

* Make the last argument (doctype) to `DOMImplementation.createDocument` optional (Firefox bug 909859).
* Implement the new `element.classList` specification which permits adding/removing several classes with one call (Firefox bug 814014).
* The `URL()` constructor has been implemented on the `URL` interface (Firefox bug 887364).
* The properties `URLUtils.origin`, `URLUtils.password`, and `URLUtils.username` are now available to all interfaces implementing the `URLUtils` mixin: `URL`, `Location`, `HTMLAnchorElement`, and `HTMLAreaElement` (Firefox bug 887364).
* The `URL` interface is now accessible from Web Workers (Firefox bug 887364).
* IndexedDB can now be used as an "optimistic" storage area so it doesn't require any prompts and data is stored in a pool with LRU eviction policy, in short temporary storage (Firefox bug 785884).
* Support for `WaveShaperNode.oversample` has been added (Firefox bug 875277).
* Path of the persistent storage has been changed from `<profile>/indexedDB` to `<profile>/storage/persistent` (on b2g from `/data/local/indexedDB` to `/data/local/storage/persistent`).
* The `Screen.orientation` property and `Screen.lockOrientation()` method now support the `default` value, mapping to `portrait-primary` or `landscape-primary`, depending of the device (Firefox bug 908058) This works only for Firefox OS and Firefox for Android. Firefox Desktop is not supported.
* `Event` constructors can be used in Web workers (Firefox bug 910910).
* Trying to set the `Document.domain` property on a page embedded in an `<iframe>` with the `sandbox` attribute now throws a security error (Firefox bug 907892).
* The `MessageEvent` interface has been updated to comply with the latest spec. The `initMessageEvent` method has been removed while the interface has now a constructor (Firefox bug 848294).
* The HTML5 `MessageChannel` API has been implemented, behind the `dom.messageChannel.enabled` preference (Firefox bug 677638).
* Support for `VTTCue`, behind the `media.webvtt.enabled` preference, like for all WebVTT-related implementations, has been added (Firefox bug 868509).
* The Web Audio API has been made available by default (Firefox bug 885505).
### MathML

* Inconsistent renderings of `<mmultiscripts>`, `<msub>`, `<msup>` and `<msubsup>` have been unified and the error handling of these elements has been improved (Firefox bug 827713).
### SVG

* The inclusion of SVG glyphs inside OpenType, *SVG-in-OpenType*, has been updated to match the current version of the specification (Firefox bug 906521).
* The `SVGElement.ownerSVGElement()` method doesn't throw anymore (Firefox bug 835048).
Development tools
-----------------

* The Inspector is now remotable (Firefox bug 805526).
* The web console text can be selected, `::before` and `::after` now inspectable, debugger and responsive design features are planned for this release. (https://hacks.mozilla.org/2013/09/new-features-in-the-firefox-developer-tools-episode-26/)
### Older versions

* Firefox 25 for developers
* Firefox 24 for developers
* Firefox 23 for developers
* Firefox 22 for developers
* Firefox 21 for developers
* Firefox 20 for developers
* Firefox 19 for developers
* Firefox 18 for developers
* Firefox 17 for developers
* Firefox 16 for developers
* Firefox 15 for developers
* Firefox 14 for developers
* Firefox 13 for developers
* Firefox 12 for developers
* Firefox 11 for developers
* Firefox 10 for developers
* Firefox 9 for developers
* Firefox 8 for developers
* Firefox 7 for developers
* Firefox 6 for developers
* Firefox 5 for developers
* Firefox 4 for developers
* Firefox 3.6 for developers
* Firefox 3.5 for developers
* Firefox 3 for developers
* Firefox 2 for developers
* Firefox 1.5 for developers


Firefox 84 for developers - Mozilla

Firefox 84 for developers
=========================

This article provides information about the changes in Firefox 84 that will affect developers. Firefox 84 was released on December 15, 2020.

**Note:** See also And now for … Firefox 84 on Mozilla Hacks.

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

### Developer Tools

* The Firefox Accessibility Inspector now supports displaying the keyboard tab order on a web page. This provides a better high-level overview of how the page will be navigated using the keyboard than tabbing through the links (Firefox bug 1654956).
### HTML

*No changes.*

### CSS

* We've added support for complex selectors to the `:not` pseudo-class (Firefox bug 933562).

#### Removals

* We've removed the proprietary `-moz-default-appearance` property values `scrollbar-small` (`scrollbar-width: thin` is used instead) and `scrollbar` (macOS only; `scrollbar-horizontal` and `scrollbar-vertical` are used instead) (Firefox bug 1673132).
### JavaScript

* Custom date/time formats specified as options to the `Intl.DateTimeFormat()` constructor can now include `fractionalSecondDigits` — the number of digits used to represent fractions of a second (Firefox bug 1645107).
### HTTP

*No changes.*

### Security

* Firefox now ensures that `localhost` URLs — such as `http://localhost/` and `http://dev.localhost/` — refer to the local host's loopback interface (e.g. `http://127.0.0.1`). As a result, resources loaded from `localhost` are now assumed to have been delivered securely (see Secure contexts), and also will not be treated as mixed content (Firefox bug 1220810, Firefox bug 1488740).
### APIs

* We've added support for the `PerformancePaintTiming` interface of the Paint Timing API (Firefox bug 1518999).
* The `Navigator.registerProtocolHandler()` method now only accepts two parameters: `scheme` and `url`. `title` has been removed (Firefox bug 1631464).

#### Media, WebRTC, and Web Audio

* The `MediaRecorder.start()` method now throws an `InvalidModificationError` if the number of tracks on the stream being recorded has changed (Firefox bug 1581139).

#### Removals

* The application cache has been removed — developers should use the Service Worker API instead (Firefox bug 1619673).
### WebAssembly

*No changes.*

### WebDriver conformance (Marionette)

* Added chrome scope support for `WebDriver:PerformActions` and `WebDriver:ReleaseActions` (Firefox bug 1365886).
* The new Fission-compatible API has been enabled by default now. To revert to the former API the `marionette.actors.enabled` preference has to be set to `false` (Firefox bug 1669169).
* Fixed `WebDriver:SwitchToWindow` to always switch back to the top-level browsing context (Firefox bug 1305822).
* Improved browsing context checks for `WebDriver:SwitchToParentFrame` (Firefox bug 1671622).
* Fixed a hang for `WebDriver:Back` encountered when the currently-selected `<iframe>` gets unloaded (Firefox bug 1672758).

#### Known bugs

* After page navigation, accessing a previously-retrieved element might not always raise a "stale element" error, and can also lead to a "no such element" error. To prevent this, set the `marionette.actors.enabled` preference to `false` (Firefox bug 1684827).
Changes for add-on developers
-----------------------------

* The `browsingData.remove()` API now supports removing a subset of data types by `cookieStoreId`.
Older versions
--------------

* 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
* Firefox 55 for developers
* Firefox 54 for developers
* Firefox 53 for developers


Firefox 116 for developers - Mozilla

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


Firefox 7 for developers - Mozilla

Firefox 7 for developers
========================

Firefox 7 shipped on September 27, 2011. This article provides information about the changes that affect developers — both of web content and of Firefox add-ons.

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

### HTML

* The `HTMLHeadElement` `profile` property has been removed, this property has been deprecated since Gecko 2.0.
* The `HTMLImageElement` `x` and `y` properties have been removed.
* The `HTMLSelectElement` `add()` method `before` parameter is now optional.
* The `<body>` element's `background` attribute is no longer resolved as a URI; this is in compliance with the current HTML specification.
* The `<option>` element's `label` attribute now reflects the value of the element's text content if the attribute isn't specified.

#### Canvas

* As part of the Azure project the Direct2D Azure Backend has been implemented and will significantly improve the performance of the 2D canvas.
* Specifying invalid values when calling `setTransform()`, `bezierCurveTo()`, or `arcTo()` no longer throws an exception; these calls are now correctly silently ignored.
* The `isPointInPath()` method now correctly considers the transformation matrix when comparing the specified point to the current path.
* Calling `strokeRect()` with a zero width and height now correctly does nothing.
* Calling `drawImage()` with a zero width or height `<canvas>` now throws `INVALID_STATE_ERR`.
* Calling `drawImage()` with non-finite coordinates no longer throws an exception.
* `toDataURL()` method now accepts a second argument to control JPEG quality.
* Support for the non-standard `globalCompositeOperation` operations `clear` and `over` has been removed.
* Shadows are now only drawn for `source-over` compositing operations.
* You can now configure the fill rule used by canvas by setting the `mozFillRule` attribute on the context.
* Support for the experimental `mozDash`, `mozDashOffset`, `mozCurrentTransform` and `mozCurrentTransformInverse` attributes has been added.
* Support for the non-standard methods `mozDrawText()`, `mozMeasureText()`, `mozPathText()` and `mozTextAlongPath()` has been removed.
### CSS

* `text-overflow` is now supported.
* The `-moz-orient` property has been fixed so that `<progress>` elements that are vertically oriented have appropriate default dimensions.
### MathML

* XLink href has been restored and the MathML3 `href` attribute is now supported. Developers are encouraged to move to the latter syntax.
* Support for the `voffset` attribute on `<mpadded>` elements has been added and behavior of `lspace` attribute has been fixed.
* The top-level `<math>` element now accepts any attributes of the `<mstyle>` element.
* Support for Asana Math fonts has been added.
* The `medium` line thickness of fraction bars in `<mfrac>` elements has been corrected to match the default thickness.
* Names for negative spaces are now supported.
### DOM

* The `File` interface's non-standard methods `getAsBinary()`, `getAsDataURL()`, and `getAsText()` have been removed as well as the non-standard properties `fileName` and `fileSize` (Firefox bug 661876).
* The `FormData` interface no longer reports the filename as an empty string when sending the `Content-Disposition` HTTP header if the data was set using a `Blob`. This fixes errors that were happening with some servers.
* The `HTMLelement.dir` property now always returns its result as all lower-case, as required by the HTML specification.
* The `FileReader` `readAsArrayBuffer()` method is now implemented.
* `Document.createEntityReference` has been removed. It was never properly implemented and is not implemented in most other browsers.
* `document.normalizeDocument` has been removed. Use `Node.normalize` instead.
* `DOMTokenList.item` now returns `undefined` if the `index` is out of bounds, previously it returned `null`.
* `Node.getFeature` has been removed.
* The `HTMLInsElement` and `HTMLDelElement` interfaces have been removed, since the `<ins>` and `<del>` elements actually use the `HTMLModElement` interface.
* In an effort to conform to the upcoming DOM4 specification where `Attr` do not inherit from `Node` anymore (it did in DOM Core 1, 2 and 3), many `Node` properties and methods on the `Attr` interface are now reporting warnings as we work toward removing them in a later version.
* Added support for the `ondeviceorientation` and `ondevicemotion` properties on `window` objects.
* `window.resizeTo`, `window.resizeBy`, `window.moveTo`, and `window.moveBy` no longer apply to the main window.
### JavaScript

* The `Function.arity` property has been removed; use `Function.length` instead.
### WebSockets

* The `network.websocket.max-connections` preference is used to determine the maximum number of WebSocket connections that can be open at a time. The default value is 200.
* The underlying WebSocket protocol version 8 (as specified by IETF draft 10) is used now instead of the version 7 protocol used by Firefox 6.
* The WebSocket API is now available on Firefox Mobile.
### console API

* Message logged with `console.log` while the web console isn't open is still logged, although they aren't displayed when the web console is opened.
### Web timing

* Initial implementation of the Navigation Timing specification which provides data that can be used to measure the performance of a website.
### XML

* In addition to the previously supported `text/xsl`, XSLT stylesheets can now use the official internet media (MIME) type `application/xslt+xml` (in the stylesheet processing instruction or the HTTP Link header field).
Changes for Mozilla and add-on developers
-----------------------------------------

These changes affect add-on developers as well as developers working on or with Mozilla code itself. Add-on developers should see Updating extensions for Firefox 7 for additional information.

**Note:** Firefox 7 requires that binary components be recompiled, as do all major releases of Firefox.

### JavaScript code modules

#### FileUtils.jsm

* New method `openFileOutputStream()` opens a file output stream, the non-safe variant, for writing.

#### AddonManager.jsm

* The Add-on Manager has new methods for managing lists of add-ons that changed during application startup: `AddonManager.addStartupChange()`, `AddonManager.removeStartupChange()`, and `AddonManager.getStartupChanges()`.
### XUL

* `<tree>` elements can now persist the state of disclosure triangles if the nodes referenced by `datasources` all have unique IDs specified by "id" attributes.
* `<panel>` elements can now be configured to let the user drag them by clicking anywhere on their background by using the new `backdrag` attribute.
### XPCOM

* The new `Components.utils.schedulePreciseGC()` method lets you schedule a thorough garbage collection cycle to occur at some point in the future when no JavaScript code is executing; a callback is executed once collection is complete.
* The `Components.utils.unload()` method lets you unload JavaScript code modules previously loaded by calling `Components.utils.load()`.
### Memory reporters

Support has been added for multi-reporters; that is, memory reporters that gather data on request and call a callback for each generated result. See `nsIMemoryMultiReporter` and `nsIMemoryMultiReporterCallback` for the relevant interfaces, as well as the `nsIMemoryReporterManager.registerMultiReporter()` and `nsIMemoryReporterManager.unregisterMultiReporter()` methods.

### User experience changes

* Extension options can now be displayed inside the Add-on Manager for both restartless and traditional extensions.
* The destination of downloads is now remembered on a site-by-site basis. This data can be accessed using `DownloadLastDir.jsm`.
### Changes to the build system

* The ActiveX embedding API is no longer built and support has been removed from the build system. Supporting interfaces have also been removed; see Removed interfaces.
* You should no longer specify `-Zc:wchar_t-` when building on Windows.
### Interface changes

* `nsISocketTransport` now offers a new connection flag: `DISABLE_IPV6`; this causes a socket to only attempt to connect to IPv4 addresses, ignoring any available IPv6 addresses. In addition, `nsIDNSService` now offers a new resolve flag: `RESOLVE_DISABLE_IPV6`; this causes domain name resolution to only consider IPv4 hosts, ignoring any available IPv6 addresses. These changes are used to implement the "happy eyeballs" strategy for improving response time when attempting to connect on hosts that support both IPv4 and IPv6 (especially those that have broken IPv6 connectivity).
* `inIDOMUtils` has two new methods, `inIDOMUtils.getChildrenForNode()` which returns a list of child nodes of a node and `inIDOMUtils.getUsedFontFaces()` which returns a list of font faces used in a range.
* The `nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH` interface has been merged into the `nsIMarkupDocumentViewer` interface.
* The `nsIDOMWindow2` interface has been merged into the `nsIDOMWindow` interface.
* The `nsIDOMWindow_2_0_BRANCH` interface has been merged into the `nsIDOMWindowInternal` interface.
* `nsINavHistoryObserver` methods with URI parameters now require a GUID as well.
* The `nsISHistory_2_0_BRANCH` interface has been merged into the `nsISHistory` interface.
* `nsITelemetry` has a new method, `nsITelemetry.getHistogramById()` which returns a histogram by its ID, and a new attribute, `canRecord` which when set to `false` disables recording of telemetry statistics. Telemetry statistics are no longer recorded when in Private Browsing Mode. (see Firefox bug 661574 and Firefox bug 661573) Telemetry histograms defined with `nsITelemetry.newHistogram()` will not be reported in the telemetry ping.
* The `nsIMemoryReporter` interface has been substantially changed; if you use it, you will need to make some adjustments to your code.
* `nsIXMLHttpRequest`, headers set by `nsIXMLHttpRequest.setRequestHeader()` are sent with the request when following a redirect. Previously these headers would not be sent.
* `nsIDocShell` has a new `allowWindowControl` attribute. If `true`, the docshell's content is allowed to control the window (that is, to move or resize the window).
* The `nsIThreadInternal2` interface has been merged into the `nsIThreadInternal` interface.

#### New interfaces

`nsIDOMFontFace`

Describes a single font face.

`nsIDOMFontFaceList`

Describes a list of font faces, each represented by `nsIDOMFontFace`.

#### Removed interfaces

The following interfaces were implementation details that are no longer needed:

* `nsIDOM3Attr`
* `nsIDOM3Node`
* `nsIDOM3TypeInfo`
* `nsIDOM3Text`
* `nsIDOMDocumentStyle`
* `nsIDOMNSDocument`
* `nsIDOMNSFeatureFactory`
* `nsIDOMNSHTMLDocument`
* `nsIDOMNSHTMLFormElement`
* `nsIDOMNSHTMLHRElement`
* `nsIDOMNSHTMLTextAreaElement`

The following interfaces were removed as part of the removal of the ActiveX embedding API:

* `DITestScriptHelper`
* `DWebBrowserEvents`
* `DWebBrowserEvents2`
* `IDispatch`
* `IMozControlBridge`
* `IMozPluginHostCtrl`
* `IWebBrowser`
* `IWebBrowser2`
* `IWebBrowserApp`
* `IXMLDocument`
* `IXMLElement`
* `IXMLElementCollection`
* `IXMLError`
* `nsIActiveXSecurityPolicy`
* `nsIDispatchSupport`
* `nsIMozAxPlugin`
* `nsIScriptEventHandler`
* `nsIScriptEventManager`
### Other Changes

* The structure of the library window (`places.xul`) has been cleaned up. This may break extensions and themes.
* The look of the print preview window has been modernized and theme authors are encouraged to style it using the CSS pseudo-elements `::-moz-page`, `::-moz-page-sequence` and `::-moz-scrolled-page-sequence`.
See also
--------

* Firefox 6 for developers
* Firefox 5 for developers
* Firefox 4 for developers
* Firefox 3.6 for developers
* Firefox 3.5 for developers
* Firefox 3 for developers
* Firefox 2 for developers
* Firefox 1.5 for developers


Firefox 17 for developers - Mozilla

Firefox 17 for developers
=========================

Firefox 17 shipped on November 20, 2012. This article lists key changes that are useful for not only web developers, but also Firefox and Gecko developers as well as add-on developers.

Changes for Web developers
--------------------------

### HTML

* Support for the `sandbox` attribute on the `<iframe>` element has been added. (Firefox bug 341604)
### CSS

* Support for `@supports` at-rule defined in CSS Conditional Rules Module Level 3 has been landed. It is disabled by default. Developers can try it by setting `layout.css.supports-rule.enabled` to true (bug 649740).
* Support for the CSS Selectors Level 4 pseudo-class `:dir()` allowing selection of elements based on their directionality has landed. (bug 562169)
* Support for the newly specified `isolate-override` value of the CSS `unicode-bidi` value has landed (Firefox bug 774335)
* Our prefixed implementation of `box-sizing` now takes into account `min-height` and `max-height`. One step closer to its unprefixing (Firefox bug 308801)
### DOM/APIs

* Support for `CSSSupportsRule` interface defined in CSS3 Conditional Rules specification has been landed (Firefox bug 649740)
* Support for `WheelEvent` object and `wheel` event have been landed (Firefox bug 719320).
* Support DOM Meta key on Linux again (Firefox bug 751749).
* On `HTMLMediaElement`, a new method, `mozGetMetadata`, that returns a JavaScript object whose properties represent metadata from the playing media resource as {key: value} pairs (Firefox bug 763010).
* Support for `Range.intersectsNode` has been added again; it has been removed in Gecko 1.9 (Firefox bug 579638.
* `Range.compareBoundaryPoints()` now throws a `DOMException` with the `NOT_SUPPORTED_ERR` value when the comparison method is invalid (Firefox bug 714279) .
* `Event.initEvent()` has been adapted to the spec: it doesn't throw anymore if called after the dispatch of the event, it is only a no-op (Firefox bug 768310).
* The non-standard `XMLHttpRequest.onuploadrequest` property has been removed (Firefox bug 761278).
* The method `XMLHttpRequest.getAllResponseHeaders()` now separates them with a CRLF (instead of a LF), as requested by the spec (Firefox bug 730925).
### JavaScript

* `String` object now offers Harmony `startsWith`, `endsWith`, and `contains` methods (Firefox bug 772733).
* The String methods link and anchor now escape the `'"'` (quotation mark) (Firefox bug 352437).
* Experimental support for strawman `ParallelArray` object has been implemented (Firefox bug 778559).
* Support to iterate `Map`/`Set` (Firefox bug 725909).
* Disabled EcmaScript for XML (E4X), an abandoned JavaScript extension, for web content by default (Firefox bug 778851).
* `__exposedProps__` must now be set for Chrome JavaScript objects exposed to content. Attempts to access Chrome objects from content without `__exposedProps__` set will fail silently (Firefox bug 553102).
* `for...of` loops now work in terms of `.iterator()` and `.next()` (Firefox bug 725907).
### WebGL

* The `EXT_texture_filter_anisotropic` WebGL extension has been unprefixed. Using `"MOZ_EXT_texture_filter_anisotropic"` will present a warning from now on. The prefixed name is going to be removed in a future release (Firefox bug 776001).
### SVG

*No change.*

### MathML

* The parsing of the `align` attribute on `<mtable>` elements has been updated to treat optional spaces more correctly.
### XUL

* XUL `key` element supports "os" modifier which is Win key (Super or Hyper key) (Firefox bug 778732).
### Network

* Removed the non-standard feature `XMLHttpRequest.onuploadprogress` which was deprecated in Firefox 14.

*No change.*

### Developer tools

* Change JSTerm's $ helper function from getElementById to querySelector() (Firefox bug 751749).
### User Agent

The Gecko part of the user agent string changed. The build date (which hadn't been updated since 2010) was removed, and the Gecko version number was put in its place instead. So `Gecko/20100101` -> `Gecko/17.0`. This may affect you if you are doing user agent sniffing.

Changes for add-on and Mozilla developers
-----------------------------------------

### Interface changes

`nsIInputStream`

The `available()` method returns 64-bit length instead of 32-bit (Firefox bug 215450).

`nsIDOMWindowUtils`

The `sendMouseScrollEvent()` method has been replaced with `sendWheelEvent()` (Firefox bug 719320).

`nsIFilePicker`

The `open()` method, to open the file dialog asynchronously, has been added and the `show()` method has been deprecated (Firefox bug 731307).

`nsIScriptSecurityManager`

The `checkLoadURIStr()` and `checkLoadURI()` methods have been removed (Firefox bug 327244).

`nsIRefreshURI`

The `setupRefreshURIFromHeader()` method has a `principal` parameter added (Firefox bug 327244).

#### New interfaces

None.

#### Removed interfaces

None removed.

See also
--------

* Firefox 17 Release Notes
* Aurora 17 is out, bringing better security and support for new standards (Mozilla Hacks)
* Add-on Compatibility for Firefox 17 (Add-ons Blog)
### Older versions

* Firefox 16 for developers
* Firefox 15 for developers
* Firefox 14 for developers
* Firefox 13 for developers
* Firefox 12 for developers
* Firefox 11 for developers
* Firefox 10 for developers
* Firefox 9 for developers
* Firefox 8 for developers
* Firefox 7 for developers
* Firefox 6 for developers
* Firefox 5 for developers
* Firefox 4 for developers
* Firefox 3.6 for developers
* Firefox 3.5 for developers
* Firefox 3 for developers
* Firefox 2 for developers
* Firefox 1.5 for developers


Firefox 75 for developers - Mozilla

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


Firefox 44 for developers - Mozilla

Firefox 44 for developers
=========================

To test the latest developer features of Firefox, install Firefox Developer EditionFirefox 44 was released on January 26, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.

Changes for Web developers
--------------------------

### Developer tools

Highlights:

* Memory tool
* Animation inspector improvements
* New Waterfall markers: DomContentLoaded, load, worker messages

All devtools bugs fixed between Firefox 43 and Firefox 44.

### HTML

* `<link rel="prefetch">` now obeys the `crossorigin` attribute (Firefox bug 1214819).
### CSS

* `position: fixed;` now always creates a new stacking context (Firefox bug 1179288).
* The support of `unicode-range` has been enabled by default (Firefox bug 1119062).
* Our experimental implementation of CSS Writing Modes has been updated to reflect the latest specification:
    + The value `sideways` of the `text-orientation` property has been implemented and `sideways-right` has been made an alias of it (Firefox bug 1193488).
    + The value `sideways-rl` and `sideways-lr` of the `writing-mode` property (Firefox bug 1193488 and Firefox bug 1193519).
* The non-standard properties `-moz-math-display` and `-moz-window-shadow` are no more available from Web content (Firefox bug 1207002, Firefox bug 1211040, and Firefox bug 1212607).
* The `font-style` property now distinguishes between `oblique` and `italic` when both variants are available (Firefox bug 543715).
* Though not supported, the properties `@page/marks`, `orphans`, `page`, `size`, and `widows`, were parsed and `@supports` was incorrectly reporting them as supported; this has been fixed and the properties are not parsed anymore, nor marked as supported (Firefox bug 1215702).
* The internal value `-moz-mac-unified-toolbar` has been removed from the possible values for the `appearance` property (Firefox bug 1206468).
* Several `-webkit` prefixed properties and values have been added for web compatibility, behind the preference `layout.css.prefixes.webkit`, defaulting to `false` (Firefox bug 837211):
    + `-webkit-animation`
    + `-webkit-animation-delay`
    + `-webkit-animation-direction`
    + `-webkit-animation-duration`
    + `-webkit-animation-fill-mode`
    + `-webkit-animation-iteration-count`
    + `-webkit-animation-name`
    + `-webkit-animation-play-state`
    + `-webkit-animation-timing-function`
    + `-webkit-text-size-adjust`
    + `-webkit-transform`
    + `-webkit-transform-origin`
    + `-webkit-transform-style`
    + `-webkit-transition`
    + `-webkit-transition-delay`
    + `-webkit-transition-duration`
    + `-webkit-transition-property`
    + `-webkit-transition-timing-function`
    + `-webkit-border-radius`
    + `-webkit-border-top-left-radius`
    + `-webkit-border-top-right-radius`
    + `-webkit-border-bottom-left-radius`
    + `-webkit-border-bottom-right-radius`
    + `-webkit-appearance`
    + `-webkit-background-clip`
    + `-webkit-background-origin`
    + `-webkit-background-size`
    + `-webkit-border-image`
    + `-webkit-box-shadow`
    + `-webkit-box-sizing`
    + `-webkit-user-select`
    + `-webkit-linear-gradient()` Firefox bug 1210575
    + `-webkit-radial-gradient"()` Firefox bug 1210575
    + `-webkit-repeating-linear-gradient()` Firefox bug 1210575
    + `-webkit-repeating-radial-gradient()` Firefox bug 1210575
### JavaScript

#### New APIs

* `Symbol.toPrimitive`, `Symbol.prototype[@@toPrimitive]`, and `Date.prototype[@@toPrimitive]` have been implemented (Firefox bug 1054756).

#### Changes

* The `let` and `const` bindings in the global level have been made compliant with ES2015 semantics. See Firefox bug 589199 and the blog post "Breaking changes in let and const in Firefox Nightly 44". In addition, `let` is now available to default Web JavaScript (strict and non-strict) and does not require a version opt-in anymore (Firefox bug 932517).
* If typed arrays' (like `Int8Array`) and `ArrayBuffer`) constructors are called as a function without the `new` operator, a `TypeError` is now thrown as per the ES2015 specification (Firefox bug 980945, Firefox bug 1214936).
* The `RegExp` sticky flag now follows the ES2015 standard for anchored sticky regular expressions (Firefox bug 773687).
* The JavaScript shell (SpiderMonkey's REPL) now defaults to the default, Web-compatible JS version (and not JS1.7+ anymore) (Firefox bug 1192329).

#### Removals

* Support for the non-standard `let` blocks has been dropped (Firefox bug 1167029.
* The non-standard and deprecated property `Object.prototype.__noSuchMethod__` has been removed (Firefox bug 683218).
### Interfaces/APIs/DOM

#### DOM & HTML DOM

* For compatibility with specific existing sites, the property `Document.charset` has been implemented as an alias of `Document.characterSet` (Firefox bug 647621).
* Support for the `window.sidebar.addSearchEngine()` method, which allowed Web pages to invoke an installation of a Sherlock plugin, has been dropped and now it just logs a warning in the Web Console (Firefox bug 862148).
* To fight unwanted pop-ups, prompts requested in `beforeunload` events of pages that have not been interacted with are no more displayed (Firefox bug 636905).
* The deprecated method `MessageEvent.initMessageEvent()` has been reimplemented for backward compatibility (Firefox bug 949376).
* The obsolete property `DocumentType.internalSubset` has been removed (Firefox bug 801545).
* For compatibility with existing sites, the properties `Window.orientation` and `Window.onorientationchange`, as well as the `orientationchange` event have been implemented (Firefox bug 920734).
* An `<iframe>` with explicit fullscreen request should not exit fullscreen implicitly (Firefox bug 1187801).
* The events `mouseover`, `mouseout`, `mouseenter`, `mouseleave`, `pointermove`, `pointerover`, `pointerout`, `pointerenter` and `pointerleave` are now triggered for disabled form elements (Firefox bug 218093).
* The method `Element.webkitMatchesSelector()` has been added (Firefox bug 1216193) to improve interoperability.
* To match the spec, the method `Document.createAttribute()` now converts the input to lower case (Firefox bug 1176313).
* The non-standard `dialog` feature for `Window.open()` is no longer available to Web content. It is still available to extensions and other code with chrome privileges (Firefox bug 1095236.

#### Canvas

* A new experimental `OffscreenCanvas` API that allows rendering contexts (such as WebGL) to run in Web Workers has been implemented. To use this experimental API set `gfx.offscreencanvas.enabled` to `true` in about:config (Firefox bug 709490). This API includes:
    + The `OffscreenCanvas` interface,
    + `HTMLCanvasElement.transferControlToOffscreen()`, and
    + `WebGLRenderingContext.commit()`.
    + Several WebGL interfaces are now also available in a worker context when this API is enabled.

#### WebGL

* Uniform Buffer Objects have been implemented (Firefox bug 1048747).

#### IndexedDB

* The `IDBIndex.getAll()` and `IDBIndex.getAllKeys()`, and there counterparts on `IDBObjectStore` are now available by default (Firefox bug 1196841).

#### Service Workers

* The `ServiceWorkerMessageEvent` and `ExtendableMessageEvent` interfaces have been implemented (Firefox bug 1143717 and Firefox bug 1207068).
* `Headers` objects now support a pair iterator, meaning that the methods `Headers.entries()`, `Headers.keys()`, and `Headers.values()` are now available; `Symbol.iterator` now also returns the default iterator for them (Firefox bug 1108181).
* The `XMLHttpRequest` API has been disabled on Service Workers (Firefox bug 931243).
* The interface `FetchEvent` now extends `ExtendableEvent`, giving it access to the `ExtendableEvent.waitUntil()` method. (Firefox bug 1214772).
* Following a recent change in the specification, `FetchEvent.client` has been removed (Firefox bug 1218135).
* To match the latest specification, the `ServiceWorkerContainer.onreloadpage` has been removed (Firefox bug 1218139).
* The event handlers `onbeforeevicted` and `onevicted` have been removed as they weren't following the spec. They will be reintroduced in the future, but their removal will allow feature detection to work as expected (Firefox bug 1218142).
* In the `FetchEvent()` constructor, if the `isReload` member is not present in the options dictionary, it now defaults to `false` (Firefox bug 1216401).
* The `Client.frameType` property is now implemented on the right interface; it was on `WindowClient` before (Firefox bug 1218146).
* When AppCache is used to provide offline support for a page, a warning message is now displayed in the console advising developers to use Service workers instead (Firefox bug 1204581.)
* Service workers have been enabled by default in Gecko.

#### WebRTC

* WebRTC interfaces have been *unprefixed* (Firefox bug 1155923). In particular:
    + `mozRTCPeerConnection` is now `RTCPeerConnection`.
    + `mozRTCIceCandidate` is now `RTCIceCandidate`.
    + `mozRTCSessionDescription` is now `RTCSessionDescription`.
* The `RTCDataChannel.bufferedAmountLowThreshold` property, as well as the `bufferedamountlow` event and its event handler, have been implemented (Firefox bug 1178091).
* The attribute `RTCPeerConnection.canTrickleIceCandidates` has been added, the non-standard method `RTCPeerConnection.updateIce()` removed (Firefox bug 1209744).
* The `MediaStream` interface now supports the `MediaStream.addTrack()` and `MediaStream.removeTrack()` methods (Firefox bug 1103188).
* The constructor `MediaStream()` has been implemented (Firefox bug 1070216).
* Support for the non-standard constraint style option list for `RTCOfferOptions` has been removed.

#### New APIs

* An experimental implementation of the Canvas API in Workers has landed: `OfflineCanvas` and `HTMLCanvasElement.transferControlToOffscreen()` are available behind the `gfx.offscreencanvas.enabled` preference, currently disabled by default (Firefox bug 709490).
* The Text2Speech API, part of Web Speech API, has now an OS X backend. But this is disabled by default (Firefox bug 1003452).

#### Miscellaneous

* `URLSearchParams` objects now support a pair iterator, meaning that the methods `URLSearchParams.entries()`, `URLSearchParams.keys()`, and `URLSearchParams.values()` are now available; `Symbol.iterator` now also returns the default iterator for them (Firefox bug 1085284).
* `FormData` objects now support a pair iterator, meaning that the methods `FormData.entries()`, `FormData.keys`, and `FormData.values()` are now available; `Symbol.iterator` now also returns the default iterator for them (Firefox bug 1127703).
* When `XMLHttpRequest.send()` is used with an HTML document, it now uses `text/html` instead of `application/xml` (Firefox bug 918771).
* Speech synthesis (text-to-speech) has been implemented in Firefox Desktop for Mac and Linux, hidden behind the `media.webspeech.synth.enabled` flag in `about:config` (Firefox bug 1003452, Firefox bug 1003464.) See Web Speech API for more information.
* Elements inside a `<frame>` or an `<object>` can't be set fullscreen anymore (Firefox bug 1212299).
* Sanitization of WOFF fonts is a bit more stricter, leading to more incorrect fonts being rejected, this sanitization is made a bit less stricter in Firefox 46 (Firefox bug 1193050 and Firefox bug 1244693).
### MathML

*No change.*

### SVG

*No change.*

### Audio/Video

*No change.*

HTTP
----

* Support for the Brotli algorithm has been added and both `Accept-Encoding` and `Content-Encoding` headers now support the `br` value (Firefox bug 366559 and Firefox bug 1211916).
* Incorrect support of HTTP/2 headers containing line breaks (`'/n'`) have been removed as the spec doesn't allow it, unlike HTTP/1 (Firefox bug 1197847).
Networking
----------

*No change.*

Security
--------

* RC4 is now also disabled by default on Beta and Release versions of the browser (Firefox bug 1201025) and the whitelist is now empty by default (Firefox bug 1215796).
Changes for add-on and Mozilla developers
-----------------------------------------

### Interfaces

*No change.*

### XUL

*No change.*

### JavaScript code modules

* Added `LIKE` support to Sqlite.jsm (Firefox bug 1188760).
* Added Snackbars.jsm module to Firefox for Android (Firefox bug 1215026)
### XPCOM

* The `nsIDOMWindow` interface is now empty. Its contents were either no longer used, had moved elsewhere, or were only used from C++. The items available from C++ code now reside in the nsPIDOMWindow interface (Firefox bug 1216401).
### Other

* Due to breaking changes in Firefox 44 (bug 1202902), add-ons packed with cfx will not work any longer. To make your add-on compatible again, please use jpm. You can find steps to migrate from *cfx* to *jpm* here.
Older versions
--------------

* Firefox 43 for developers
* Firefox 42 for developers
* Firefox 41 for developers
* Firefox 40 for developers
* Firefox 39 for developers
* Firefox 38 for developers
* Firefox 37 for developers
* Firefox 36 for developers
* Firefox 35 for developers
* Firefox 34 for developers
* Firefox 33 for developers
* Firefox 32 for developers
* Firefox 31 for developers
* Firefox 30 for developers
* Firefox 29 for developers
* Firefox 28 for developers
* Firefox 27 for developers
* Firefox 26 for developers
* Firefox 25 for developers
* Firefox 24 for developers
* Firefox 23 for developers
* Firefox 22 for developers
* Firefox 21 for developers
* Firefox 20 for developers
* Firefox 19 for developers
* Firefox 18 for developers
* Firefox 17 for developers
* Firefox 16 for developers
* Firefox 15 for developers
* Firefox 14 for developers
* Firefox 13 for developers


Firefox 112 for developers - Mozilla

Firefox 112 for developers
==========================

This article provides information about the changes in Firefox 112 that affect developers. Firefox 112 was released on April 11, 2023.

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

### HTML

* The `HTMLElement` property **`inert`** is now fully enabled. It allows the browser to ignore content or interactive elements that are within an HTMLElement with the `inert` attribute. See Firefox bug 1764263 for more details.
### CSS

* The `overlay` keyword value for the `overflow` property is now supported as a legacy alias of the keyword value `auto` (Firefox bug 1817189).
* The `linear()` easing function is now supported.
 This defines easing functions that interpolate linearly between a set of points and is useful for approximating complex animations (Firefox bug 1819447, Firefox bug 1764126).
### JavaScript

No notable changes.

### APIs

* `navigator.getAutoplayPolicy()` is now supported, allowing developers to configure autoplay of media elements and audio contexts based on whether autoplay is allowed, disallowed, or only allowed if the audio is muted.
 See Firefox bug 1773551 for more details.
* Rounded rectangles can now be drawn in 2D canvases using `CanvasRenderingContext2D.roundRect()`, `Path2D.roundRect()` and `OffscreenCanvasRenderingContext2D.roundRect()`.
 See Firefox bug 1756175 for more details.
* The deprecated and non-standard `CanvasRenderingContext2D.mozTextStyle` attribute is now disabled by default (Firefox bug 1818409).

#### Removals

* Removes support for `IDBMutableFile`, `IDBFileRequest`, `IDBFileHandle`, and `IDBDatabase.createMutableFile()`.
 These interfaces are not present in any specification, have been behind a preference since version 102, and have been removed from the other main browser engines for some years.
 (Firefox bug 1500343.)
### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Implemented the `browsingContext.print` command, which allows clients to request a rendered PDF document of the browsing context, represented as a Base64-encoded string. See Firefox bug 1806810 for more details.
* Implemented `script.addPreloadScript` and `script.removePreloadScript` commands, which let test clients inject a functionality that's guaranteed to be available for any content scripts that are subsequently loaded, and before any later scripts that WebDriver injects into the context. See Firefox bug 1806420 and Firefox bug 1806465 for more details.
* `Element` and `ShadowRoot` references as stored in the node cache can now be used in both Marionette and WebDriver BiDi by their exact same unique reference. See Firefox bug 1770733 for more details.
* Removed `isRedirect` from the network events base parameters (Firefox bug 1819875).

#### Marionette

* Fixed an issue where the payload of a response was not wrapped within a `value` field based on certain data type. (Firefox bug 1819029).
* Fixed an issue where `WebDriver:ElementClear` was emitting an extra `change` event for content editable elements (Firefox bug 1744925).
Changes for add-on developers
-----------------------------

* The properties `usedDelegatedCredentials`, `usedEch`, `usedOcsp`, and `usedPrivateDns` have been added to `webRequest.SecurityInfo`. These properties provide information about the security of the connection used for a web request (Firefox bug 1804460).
* The property `"type"` is supported in the `"background"` manifest key. Setting this key to `"module"` loads background scripts specified with `"scripts"` as ES modules, avoiding the need to switch to background pages to use ES modules (Firefox bug 1811443).
Older versions
--------------

* 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
* Firefox 84 for developers
* Firefox 83 for developers
* Firefox 82 for developers
* Firefox 81 for developers