Firefox 121 for developers - Mozilla

Firefox 121 for developers
==========================

This article provides information about the changes in Firefox 121 that affect developers. Firefox 121 was released on December 19, 2023.

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

### HTML

* Lazy loading of `<iframe>` elements is now supported, allowing developers to hint that particular `<iframe>` elements should only be loaded when (and if) they become visible. This can speed up initial load time by reducing the resources that need to be fetched on page load (some `<iframe>` elements may not need to be fetched at all).
 The hint can be provided via the `loading` attribute on the `<iframe>` element, or in JavaScript using `HTMLIFrameElement.loading`.
 (Firefox bug 1622090).
### CSS

* The `text-wrap` property has been updated with support for the values `balance` and `stable`. The `balance` value is used for short blocks of content, such as headings, and will make sure that the content is balanced and easy to read when spread over multiple lines. The `stable` value makes sure that editable content does not reflow while the user is editing it (Firefox bug 1731541).
* The `:has()` selector, commonly referred to as the *parent selector*, is now supported. It allows developers to apply styles to an element based on related elements, e.g. `li:has(ul)` will match a list which contains a sub-list, or `h1:has(+ p)` will match a heading with a paragraph directly after it.
* The `text-indent` CSS property now supports the `each-line` and `hanging` property values (Firefox bug 784648), allowing developers to more easily specify certain text indentation styles. Additionally, developers can now combine multiple `text-indent` property values for more creativity, e.g. `text-indent: 3em hanging each-line`.
### JavaScript

* The `Promise.withResolvers()` static method is now supported. This exposes the `resolve` and `reject` callback functions in the same scope as the returned `Promise`, allowing code that resolves or rejects the promise to be defined after its construction (Firefox bug 1845586).
* `Date.parse()` now accepts several additional date formats:
    + Year > 9999 for `YYYY-MMM-DD` format (e.g. `19999-Jan-01`) (Firefox bug 1858851)
    + `MMM-DD-YYYY` (e.g. `Jan-01-1970`) (Firefox bug 1863489)
    + Milliseconds for non-ISO date formats (e.g. `Jan 1 1970 10:00:00.050`) (Firefox bug 1863125)
    + Day of week at the beginning of formats which were being rejected, such as:
        - `Wed, 1970-01-01`
        - `Wed, 1970-Jan-01`The day of week does not need to be correct, or a day of week at all; for example, `foo 1970-01-01` works (Firefox bug 1617562).
* Other `Date.parse()` fixes:
    + `YYYY-M-DD` and `YYYY-MM-D` are no longer assumed GMT as an ISO date `YYYY-MM-DD` would be (Firefox bug 1783731).
    + Milliseconds for all formats are truncated after 3 digits, rather than being rounded (Firefox bug 746529).
### APIs

* The `sendOrder` property of the `WebTransportSendStream` interface is now supported, allowing the relative priority of outgoing WebTransport API *bidirectional* streams to be read and changed after the stream is created. Note that this cannot be used to modify the priority of unidirectional streams, as Firefox implements them as `WritableStream` instead of `WebTransportSendStream`. (For more information see Firefox bug 1853444.)

#### DOM

* `HTMLInputElement.showPicker()` now works for `<input type="week">` and `<input type="month">` elements on Android (Firefox bug 1853797).
### WebAssembly

* WebAssembly now supports tail call optimization via new `return_call` and `return_call_indirect` alternatives to the `call` instruction. This improves performance, reduces stack space usage, and enhances compatibility with programming languages that use tail calls. (Firefox bug 1858855).
### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Added the `browsingContext.contextDestroyed` event that is emitted when a browsing context is discarded (Firefox bug 1694390).
* Added support for the `userActivation` parameter for the `script.callFunction` and `script.evaluate` commands which allows evaluating JavaScript while emulating the user action. (Firefox bug 1845488).
* Added support for the `defaultValue` field for the `browsingContext.userPromptOpened` event that allow users to retrieve the default value of prompts (Firefox bug 1851761).
* Renamed the `viewportOptions` parameter for the `browsingContext.captureScreenshot` command to `boxOptions` (Firefox bug 1859258).
* Removed the `scrollIntoView` parameter for the `browsingContext.captureScreenshot` command, in favor of the `origin` parameter below (Firefox bug 1862649).
* Added support for the `origin` parameter for the `browsingContext.captureScreenshot` command which allows defining the origin and bounds of the screenshot. The accepted values are `"document"` and `"viewport"` (Firefox bug 1840999).
* When serializing `Window` objects, the serialized value now contains a `context` property set to the context id for the `Window` object which can also be exchanged with Marionette to reference specific windows and frames (Firefox bug 1841049).
* Fixed a bug where serialization of a Node nested in a data structure (array, map, etc.) would fail (Firefox bug 1861000).
* Fixed a bug where the `browsingContext.navigate` command could return an incorrect navigation id (Firefox bug 1861655).

#### Marionette

* Added support for serializing and deserializing `Window` and `Frame` objects (Firefox bug 1274251).
Experimental web features
-------------------------

These features are newly shipped in Firefox 121 but are disabled by default. To experiment with them, search for the appropriate preference on the `about:config` page and set it to `true`. You can find more such features on the Experimental features page.

Custom element state pseudo-class: `dom.element.customstateset.enabled`

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. (Firefox bug 1861466)

`showPicker()` method for HTML select elements: `dom.select.showPicker.enabled`

The `HTMLSelectElement.showPicker()` method programmatically launches the browser picker for a `<select>` element, triggered by user interaction. (Firefox bug 1854112)

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

* Fixed a bug that resulted in background pages not starting when a manifest.json `background` key contains `service_worker` and `scripts` declarations (Firefox bug 1860304).

**Note:** Incidentally, a change in Chrome 121 sees the `scripts` property ignored when specified with the `service_worker` property. Previously, Chrome refused to load extensions containing both properties (Chromium bug 1418934).
 For more information, see Browser support of the `background` manifest key.
Older versions
--------------

* Firefox 120 for developers
* Firefox 119 for developers
* Firefox 118 for developers
* Firefox 117 for developers
* Firefox 116 for developers
* Firefox 115 for developers
* Firefox 114 for developers
* Firefox 113 for developers
* Firefox 112 for developers
* Firefox 111 for developers
* Firefox 110 for developers
* Firefox 109 for developers
* Firefox 108 for developers
* Firefox 107 for developers
* Firefox 106 for developers
* Firefox 105 for developers
* Firefox 104 for developers
* Firefox 103 for developers
* Firefox 102 for developers
* Firefox 101 for developers
* Firefox 100 for developers
* Firefox 99 for developers
* Firefox 98 for developers
* Firefox 97 for developers
* Firefox 96 for developers
* Firefox 95 for developers
* Firefox 94 for developers
* Firefox 93 for developers
* Firefox 92 for developers
* Firefox 91 for developers
* Firefox 90 for developers


Firefox 20 for developers - Mozilla

Firefox 20 for developers
=========================

Firefox 20 was released on April, 2nd 2013. This article provides information about the changes in this release that will affect developers.

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

### HTML

* Support for the `download` attribute on the `<a>` and `<area>` element has been added (Firefox bug 676619).
* The value `auto` for the global attribute `dir` has been implemented (Firefox bug 548206).
* The global attribute contextmenu now works on Firefox for Android (Firefox bug 736321).
### JavaScript

* Support for the `WeakMap.prototype.clear()` method, recently added to the Harmony (ECMAScript 2015) draft proposal has been added (Firefox bug 814562).
* Support for the `Math.imul()` method, a C-style 32-bit multiplication function. Though proposed for Harmony (ECMAScript 2015) it has not yet been accepted and still is non-standard (Firefox bug 808148).
* Web apps using draggable text with Kinetic 3.x are working, even when using the Cairo canvas backend (Firefox bug 835064).
* The `for each...in` statement has been deprecated and should not be used. Consider using the new `for...of` statement (Firefox bug 804834).
* Support for the `Map.prototype.keys()`, `Map.prototype.values()`, and `Map.prototype.entries()` has been added (Firefox bug 817368).
### CSS

* CSS Flexbox is now available by default in pre-release builds only (excluding beta versions). It can be enabled in release and beta versions by setting the `layout.css.flexbox.enabled` about:config preference to `true`.
* The `mask-type` property from the CSS Masking specification has been added (Firefox bug 793617).
* Experimental support for the `:scope` pseudo-class has been added. Enabled by default in Aurora and Nightly, it can be enabled in release and beta versions by setting the `layout.css.scope-pseudo.enabled` about:config preference to `true` (Firefox bug 648722).
### DOM/APIs

* `HTMLMediaElement` supports now `playbackRate` (both read and write), with pitch correction. Pitch correction can be controlled using the property `mozPreservesPitch` (Firefox bug 495040).
* CSSOM: Support for the new `CSSGroupingRule` and `CSSConditionRule` has been added (Firefox bug 814907).
* CSSOM: On `CSSRule` the constant CSSRule.MOZ\_KEYFRAME\_RULE and CSSRule.MOZ\_KEYFRAMES\_RULE have been unprefixed to CSSRule.KEYFRAME\_RULE and CSSRule.KEYFRAMES\_RULE. The prefixed version is temporarily kept for helping Web author to transition their code Firefox bug 816431).
* CSSOM: It is now possible to set the value of `conditionText` for `CSSMediaRule` (Firefox bug 815021).
* The `DOMParser` `parseFromStream` and `parseFromBuffer` methods are no longer available from web content (Firefox bug 816410).
* The `XMLSerializer` `serializeToStream` method is no longer available from web content (Firefox bug 816410).
* `TextDecoder` and `TextEncoder` interfaces are now available in Workers (Firefox bug 795542).
* Support for the `CSS.supports()` method has been added, behind the `layout.css.supports-rule.enabled` pref (off by default) (Firefox bug 779917).
* Support for UndoManager has been added (Firefox bug 617532).
* The CSSOM `Document.caretPositionFromPoint()` method, which returns a `CaretPosition` has been implemented.
* The index argument of the `HTMLTableRowElement.insertCell()` and `HTMLTableElement.insertRow()` methods has been made optional as per HTML specification.
* `Navigator.getUserMedia`, still prefixed as `Navigator.mozGetUserMedia` is now activated by default.
* The third, optional, `transfer` argument of `Window.postMessage` is now supported. It allows to transfer a sequence of transferable objects to the destination (Firefox bug 822094).
* The non-standard `Window.sizeToContent()` method now clamps the minimal size: the window cannot be forced anymore to small sizes preventing the user from interacting with (Firefox bug 764240).
* Blend modes, such as `overlay`, `color-burn`, `hue`, etc. have been added to the Canvas `CanvasRenderingContext2D.globalCompositeOperation` property (Firefox bug 748433).
* The prefixed version of `window.indexedDB` — `window.mozIndexedDB` — was reintroduced to Gecko, so that bad cross-browser prefixing code (such as `var indexedDB = window.indexedDB || window.webkitIndexedDB …`) doesn't break in Firefox. A better approach is `window.indexedDB = window.indexedDB || window.webkitIndexedDB …` (see Firefox bug 770844.)
### SVG

* The implementation of the `contentScriptType` and `contentStyleType` properties has been removed from `SVGSVGElement` along with the removal from SVG2 (Firefox bug 819731).
### MathML

* To help MathML authors debugging "invalid-markup" errors in their documents, MathML parsing errors (such as having too many / too few child elements) and warnings about deprecated attributes or wrong attribute values are now reported to the error console.
* The `scriptminsize` attribute now accepts unitless values and percent values. They are interpreted as multiples of the default value ("`8pt`").
* Unitless values are now also allowed for the `mathsize` and `fontsize` attributes; they multiply the default value.
Changes for add-on and Mozilla developers
-----------------------------------------

* EcmaScript for XML (E4X) is now fully disabled for all chrome and content scripts. It was previously disabled for content in Firefox 17 and has been removed entirely for Firefox 21. Use DOMParser/DOMSerializer or a non-native JXON algorithm instead.
* The `nsIDOMParserJS` interface no longer exists (Firefox bug 816410). See `nsIDOMParser` for alternatives.
* Content Preferences: The `nsIContentPrefService` interface is now deprecated and the asynchronous `nsIContentPrefService2` storage API has been implemented.
* The `nsIProfile` and `nsIProfileChangeStatus` interfaces have been removed, along with other code supporting the pre-Firefox profile management system. You probably weren't using these interfaces, but if you were, you should stop doing so. This prevents defunct parts of the profile management system from vetoing the shutdown process.
* The `nsIEventSource` interface no longer exists (Firefox bug 819639).
See also
--------

* Firefox 20 Release Notes
* Add-on Compatibility for Firefox 20
### Older versions

* 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 108 for developers - Mozilla

Firefox 108 for developers
==========================

This article provides information about the changes in Firefox 108 that will affect developers. Firefox 108 was released on December 13, 2022.

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

### HTML

* The `<source>` element supports `height` & `width` attributes when it is a child of a `<picture>` element.
 This functionality can be configured via the `dom.picture_source_dimension_attributes.enabled` preference which is now set to `true` by default (Firefox bug 1795953).
### CSS

* Trigonometric functions are now enabled with the `layout.css.trig.enabled` preference set to `true` by default.
 This allows the use of `sin()`, `cos()`, `tan()`, `asin()`, `acos()`, `atan()`, and `atan2()` functions (Firefox bug 1774589, Firefox bug 1787070).
* CSS `<calc-constant>` type is implemented to allow for well-known constants such as `pi` and `e` within math functions (Firefox bug 1682444, Firefox bug 1787070).
* Container query length units are now supported via the `layout.css.container-queries.enabled` preference, which is set to `false` by default.
 Setting this preference to `true` allows the use of `cqw`, `cqh`, `cqi`, `cqb`, `cqmin`, and `cqmax` units of length which are relative to the size of a query container.
 For more information on these units, see the CSS Container Queries documentation (Firefox bug 1744231).
* The `font-variant-emoji` property is now supported via the `layout.css.font-variant-emoji.enabled` preference, which is set to `false` by default. This property allows you to set a default presentation style for displaying emojis (Firefox bug 1461589).
### JavaScript

No notable changes

### HTTP

* `Content-Security-Policy` HTTP header directives `style-src-elem` and `style-src-attr` are now supported.
 A server can use these to specify valid sources for stylesheet `<style>` elements and `<link>` elements with `rel="stylesheet"`, and for styles applied to individual elements, respectively (Firefox bug 1529338).
* `Content-Security-Policy` HTTP header directives `script-src-elem` and `script-src-attr` are now supported.
 A server can use these to specify valid sources for JavaScript `<script>` elements, and for inline script event handlers like `onclick`, respectively (Firefox bug 1529337).
* `Content-Security-Policy` violation reports now include `effective-directive` and `status-code` properties.
 For more information, see Violation report syntax (Firefox bug 1192684).
### APIs

* Import maps are now supported.
 Import maps provide flexibility and additional control over how browsers resolve module specifiers when importing JavaScript modules.
 (Firefox bug 1795647).

#### Media, WebRTC, and Web Audio

* The Web MIDI API is now available in secure contexts.
 Calls to `navigator.requestMIDIAccess()` will prompt users with active MIDI devices to install a Site Permission Add-On, which is required to enable the API.
 For more information see Firefox bug 1795025.
### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Following a change in the specification, log entry level `"warning"` was renamed to `"warn"` (Firefox bug 1797115).
* When using `script.evaluate` and `script.callFunction` with a sandbox name equal to an empty string, the evaluation will now be done using the default realm (Firefox bug 1793589).
* Added support for the `browsingContext.domContentLoaded` event (Firefox bug 1756610).

#### Marionette

* Added support for the `tiltX`, `tiltY` and `twist` properties of pointer actions for `WebDriver:PerformActions` (Firefox bug 1793832).
* Fixed a bug where `WebDriver:GetElementText` wasn't returning the element text for pretty-printed XML (Firefox bug 1794099).
* `HTMLDocument` is no longer serialized as a `WebElement` reference (Firefox bug 1793920).
* `WebDriver:NewWindow` now opens a window with an `about:blank` tab instead of `about:newtab` (Firefox bug 1533058).
Changes for add-on developers
-----------------------------

* Firefox now issues a warning when an extension is installed if its version number doesn't follow the recommended format (Firefox bug 1793925).
Older versions
--------------

* 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
* Firefox 80 for developers
* Firefox 79 for developers
* Firefox 78 for developers
* Firefox 77 for developers


Firefox 42 for developers - Mozilla

Firefox 42 for developers
=========================

To test the latest developer features of Firefox, install Firefox Developer Edition Firefox 42 was released on November 3, 2015. 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:

* Debugging Firefox for Android over Wi-Fi
* *Firefox OS Simulator configuration in WebIDE*
* CSS filter presets

All devtools bugs fixed between Firefox 41 and Firefox 42.

### CSS

* Vertical `writing-mode` is now supported with rtl scripts (Firefox bug 1131451).
* The values of `caption-side` are now relative to the table, and changing actual meaning according to its `writing-mode` value Firefox bug 1202993.
* Non-standard properties like `-moz-margin-start` are now aliases of their standard counterpart (`margin-inline-start`, …). Previously, it was the opposite. This affects the value returned by `CSSStyleDeclaration.cssText` and iteration of the properties in a style rule, which both use the canonical form (Firefox bug 1118103).
* The prefixed version of CSS gradients can be turned off by setting the `layout.css.prefixes.gradients` preference to `false`.
* Several old bugs with `float` and margin collapsing behavior have been fixed (Firefox bug 478834, Firefox bug 538194, and Firefox bug 451791).
### HTML

* Experimental support for the `referrer` attribute of the `<img>` (Firefox bug 1166910), `<iframe>` (Firefox bug 1175736), `<a>` and `<area>` (Firefox bug 1174913) has been added. There is no effect by default, the `network.http.enablePerElementReferrer` being `false` by default.
### JavaScript

* The `Reflect` object has been implemented (Firefox bug 987514).
* The implementation of the `Proxy` `handler.ownKeys()` trap has been updated to match the final ES2015 specification (Firefox bug 1049662).
* Calling `Map`, `Set`, or `WeakMap` without `new`, will now throw a `TypeError` (Firefox bug 1083752).
### Interfaces/APIs/DOM

#### DOM & HTML DOM

* Images with an `id` are no more listed as property of the `Window` interface: `<img id="login">` isn't accessible as `window.login` anymore. This behavior was introduced in Firefox 26 and has been removed to match a later change in the spec. (Firefox bug 959992)
* `MouseEvent.offsetX` and `MouseEvent.offsetY` have been added (Firefox bug 69787).
* The `HTMLInputElement` interface has been experimentally extended to handle the upload of directories (Firefox bug 1164310). These four members can be exposed by setting the `dom.input.dirpicker` preference to `true`:
    + `HTMLInputElement.directory`
    + `HTMLInputElement.isFilesAndDirectoriesSupported`
    + `HTMLInputElement.getFilesAndDirectories()`
    + `HTMLInputElement.chooseDirectory()`
* The `Directory` interface has been experimentally extended (Firefox bug 1177688). The two members `Directory.path` and `Directory.getContents` can be exposed by setting the `dom.input.dirpicker` preference to `true`.
* The `HTMLMediaElement.mozSrcObject` has been renamed in `HTMLMediaElement.srcObject` (Firefox bug 1175523).

#### Service Workers

* `Request.context` has been removed (Firefox bug 1188062).
* The Push API has been activated by default on Firefox for Desktop (Firefox bug 1153499), but only on the Nightly/Dev Edition/Beta channels. It is being deactivated by default in the Release channel until consumer UX and debugging features have been properly implemented (Firefox bug 1207875.) You can still activate it by enabling the `dom.push.enabled` pref in `about:config`.
* The `PushManager.hasPermission()` method has been deprecated in the spec, and replaced with the `PushManager.permissionState()` method. Firefox has updated its implementation to reflect this (Firefox bug 1183853.)
* Service-worker-related additions to the Notifications API have been implemented (Firefox bug 1114554), but are disabled in this release.

#### Web Animations API

Our experimental implementation of Web Animations API have been extended to support:

* The `AnimationPlayer.playbackRate` property (Firefox bug 1127380).
* The `CSSAnimation` and `CSSTransition` interfaces (Firefox bug 1178186).
* The `Animation.reverse()` method (Firefox bug 1150808).
* The `AnimationPlaybackEvent` interface has been added and `cancel` and `finish` are now fired on `Animation` (Firefox bug 1178664).

#### Web Components

Our experimental implementation of the Shadow DOM has been modified:

* When trying to invoke `Node.cloneNode()` on a `ShadowRoot`, throws a `DataCloneError` exception (Firefox bug 1176757).
* When invoking `Document.importNode()` with a `ShadowRoot` as an argument, we now throws a `NotSupportedError` `DOMException` (Firefox bug 1177914).
* When invoking `Document.adoptNode()` with a `ShadowRoot` as an argument, we now throws a `HierarchyRequestError` `DOMException` (Firefox bug 1177991).

#### WebGL

* WebGL2 `WebGLTransformFeedback` has been implemented (Firefox bug 1048724).
* To obtain a WebGL2 context, `HTMLCanvasElement.getContext()` now takes `webgl2` instead of `experimental-webgl2` (Firefox bug 1187174).

#### WebRTC

* The `RTCPeerConnection.createOffer()`'s options data type, `RTCOfferOptions`, has been updated to more closely match the specification. Among other changes, it is now based upon the `RTCOfferAnswerOptions` dictionary, which provides the `voiceActivityDetection` option.
* The `RTCAnswerOptions` dictionary has been added. This is the type used for the `options` parameter to `createAnswer()`.
* The `RTCICECandidatePairStats.mozPriority` has been renamed to `RTCICECandidatePairStats.priority` (Firefox bug 1184426).

#### New APIs

* The `ImageBitmap` interface and the `createImageBitmap()` method have been implemented. They are available on regular window scripts and in Web workers and allow efficient posting of images between window and worker contexts (Firefox bug 1044102).

#### Miscellaneous

* The `IDBCursorWithValue` interface is now available in Web workers (Firefox bug 1188115).
* Error events sent in Web workers doesn't bubble anymore (Firefox bug 1188141).
* Media Source Extensions (MSE) has been activated for all websites, and no more for a white list of sites (Firefox bug 1185611).
* The non-standard and deprecated `Window.mozRequestAnimationFrame()` has been removed (Firefox bug 909154). Use the standard `Window.requestAnimationFrame()` instead.
* Speech synthesis (text-to-speech) has been implemented in Firefox Desktop for Windows, hidden behind the `media.webspeech.synth.enabled` flag in `about:config` (Firefox bug 1003457.) See Web Speech API for more information.
### MathML

*No change.*

### SVG

*No change.*

### Audio/Video

*No change.*

HTTP
----

* Firefox 41 and earlier versions were incorrectly accepting undefined or invalid pseudo-header fields in HTTP/2 responses. This is now fixed and the only pseudo-header field accepted from Firefox 42 is the *:status* as per the specification. Response headers containing arbitrary fields are considered malformed. (Firefox bug 1136727)
Networking
----------

* The CSP `upgrade-insecure-requests` directive has been implemented (Firefox bug 1139297).
Security
--------

* EV certificates with a validity greater than 39 months are now considered and handled as DV certificates (Firefox bug 1145679).
Changes for add-on and Mozilla developers
-----------------------------------------

### Interfaces

#### nsIContentPolicy

* The `TYPE_EMBED` constant has been added to `nsIContentPolicy` to allow Gecko internals and add-on code to better differentiate different types of requests. Previously, `TYPE_OBJECT` was used for these cases (Firefox bug 1148030).
* Similarly, the `TYPE_SUBDOCUMENT` constants has been split into `TYPE_FRAME` and `TYPE_IFRAME` (Firefox bug 1148044).
### XUL

*No change.*

### JavaScript code modules

*No change.*

### XPCOM

*No change.*

### Other

*No change.*

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

* 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 12 for developers
* Firefox 11 for developers


Firefox 73 for developers - Mozilla

Firefox 73 for developers
=========================

This article provides information about the changes in Firefox 73 that will affect developers. Firefox 73 was released on February 11, 2020.

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

### Developer tools

* CORS errors now appear as errors in the console (and no longer as warnings) giving them the appropriate visibility (Firefox bug 1602093).
* Text and regular expression searches in the web console can now be negated by prefixing them with '-' (Firefox bug 1291192).
### HTML

*No changes.*

### CSS

* We've implemented `overscroll-behavior-block` and `overscroll-behavior-inline`, the logical mappings for `overscroll-behavior-x` and `overscroll-behavior-y` (Firefox bug 833953).

#### Removals

* The proprietary `-moz-touch-enabled` media query has been removed (Firefox bug 1486964). You should use `pointer: coarse` instead.
### SVG

* The `letter-spacing` and `word-spacing` properties now work in SVG (Firefox bug 371787).
### MathML

#### Removals

* The deprecated `<mfenced>` element has been removed (Firefox bug 1603773). Use the `<mrow>` and `<mo>` elements instead.
### JavaScript

* The `yearName` and `relatedYear` fields have been made available in the `DateTimeFormat.prototype.formatToParts()` method, enabling useful formatting options for CJK calendars (Firefox bug 1591664).
### APIs

#### DOM

* The `innerWidth` and `innerHeight` properties on `Window` objects have been updated to return the width and height of the layout viewport in all situations, rather than sometimes being based on the visual viewport. In particular, previously when using Responsive Design Mode, these returned the visual viewport dimensions, causing the behavior to vary from what was expected (Firefox bug 1514429).

#### WebVR

* The deprecated WebVR API—which has been supplanted by WebXR, which supports both augmented and virtual reality applications—now requires a secure context using the HTTPS protocol to operate. This is due to the availability of sensitive input sources that may include private information (Firefox bug 1381645).

#### Removals

* Support for the `VideoPlaybackQuality` property `corruptedVideoFrames`, which has been deprecated in the specification, has been removed from Firefox (Firefox bug 1602163).
### Security

*No changes.*

### WebDriver conformance (Marionette)

* Added `WebDriver:Print` to print the current page as a PDF document (Firefox bug 1604506).
* `Webdriver:TakeScreenshot` now always captures the top-level browsing context and not the currently-selected browsing context, if no element to capture has been specified (Firefox bug 1398087, Firefox bug 1606794).
* Using `Webdriver:TakeScreenshot`'s `full` argument causes the complete page to be captured (Firefox bug 1571424).
Changes for add-on developers
-----------------------------

### API changes

* The `sidebarAction.toggle()` function has been implemented (bug 1453355).
### Manifest changes

*No changes.*

See also
--------

* Hacks blog post: Firefox 73 is upon us
Older versions
--------------

* 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 43 for developers
* Firefox 42 for developers


Firefox 38 for developers - Mozilla

Firefox 38 for developers
=========================

Firefox 38 was released on May 12th, 2015. 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:

* Bypass audio nodes in Web Audio Editor
* "copy" command in Web Console
* Highlight and filter XmlHttpRequests in Web Console
* See optimized-out variables in the Debugger
* See security warnings in the Network Monitor
* See transferred sizes in the Network Monitor
* Play/pause all animations in the page

All devtools bugs fixed between Firefox 37 and Firefox 38.

### CSS

* Support for `ruby-position` and `ruby-align` have been added and is available by default (Firefox bug 1055676 Firefox bug 1123917 and Firefox bug 1039006).
* The `:unresolved` pseudo-class has been implemented for custom elements (Firefox bug 1111633).
* The predefined style `ethiopic-numeric` now uses a space, instead of a dot, as the suffix to match a recent change to the spec (Firefox bug 1120721).
* CSS transitions on generated content (with `::before` and `::after`) on both an inline and the block that splits them now start as expected by the specification (Firefox bug 1110277).
* The implementation of CSS Logical Properties made big progress. The following properties are available behind the `layout.css.vertical-text.enabled` flag (`false` by default):
    + Direction-independent equivalents of `width` and `height`: `block-size` and `inline-size` (Firefox bug 1117983).
    + Direction-independent equivalents of `min-width` and `min-height`: `min-block-size` and `min-inline-size` (Firefox bug 1117983).
    + Direction-independent equivalents of `max-width` and `max-height`: `max-block-size` and `max-block-size` (Firefox bug 1117983).
    + Direction-independent equivalents of `margin-top`, `margin-right`, `margin-bottom` and `margin-left`: `margin-block-start`, `margin-block-end`, `margin-inline-start` and `margin-inline-end` (Firefox bug 649142).
    + Direction-independent equivalents of `padding-top`, `padding-right`, `padding-bottom` and `padding-left`: `padding-block-start`, `padding-block-end`, `padding-inline-start` and `padding-inline-end` (Firefox bug 649142).
    + Direction-independent equivalents of `border-top`, `border-right`, `border-bottom` and `border-left` and their longhands for width, style and color: `border-block-start`, `border-block-start-width`, `border-block-start-style`, `border-block-start-color`, `border-block-end`, `border-block-end-width`, `border-block-end-style`, `border-block-end-color`, `border-inline-start`, `border-inline-start-width`, `border-inline-start-style`, `border-inline-start-color`, `border-inline-end`, `border-inline-end-width`, `border-inline-end-style` and `border-inline-end-color` (Firefox bug 649142).
    + Direction-independent equivalents of `top`, `right`, `bottom` and `left`: `inset-block-start`, `offset-block-end`, `offset-inline-start` and `offset-inline-end` (Firefox bug 1120283).
* How CSS transitions start has been modified to match a recent change of the specifications, aiming at having an interoperable behavior between browsers (Firefox bug 960465).
### HTML

* The `<label>` element no longer dispatches events to the label target element if interactive content is found between the event target and the label (Firefox bug 229925).
* The `<picture>` element has been activated by default (Firefox bug 1017875).
* The `<meta name="referrer">` is supported for navigations from the context menu or via a middle-click (Firefox bug 1113431).
### JavaScript

* `Generator.prototype.return()` is implemented (Firefox bug 1115868).
* `Setter` with a rest parameter is now a `SyntaxError` (Firefox bug 1089632).
* The `name` property of functions is configurable now (Firefox bug 1084019).
* Several `Array` methods have been implemented for typed arrays as well:
    + The `of()` and `from()` methods (Firefox bug 896608).
    + The `forEach()` method (Firefox bug 1107645).
    + The `filter()` and `map()` methods (Firefox bug 1121936).
    + The `slice()` method (Firefox bug 1121935).
* Duplicated parameter name is no longer allowed when rest-parameter is present (Firefox bug 1096376).
* Duplicated parameter name is no longer allowed in arrow functions (Firefox bug 1096377).
* Duplicated parameter name is no longer allowed in concise method definitions (Firefox bug 1096378).
* Warning is shown when `Map`/`Set`/`WeakMap` constructor is called without `new` (Firefox bug 1108930).
* The `get`, `has`, and `delete` methods of `WeakMap` objects no longer throw when the `key` parameter is not an object (Firefox bug 1127827).
* The optional and non-standard second `fallback` parameter for `WeakMap.prototype.get()` has been removed (Firefox bug 1127827).
* When defining a generator method, "`set`" and "`get`" are no longer invalid names (Firefox bug 1073809).
* `RegExp.prototype.source` now returns "(?:)" instead of an empty string for empty regular expressions (Firefox bug 1130798).
* `RegExp.prototype.source` and `RegExp.prototype.toString()` now escape regular expression patterns properly (e.g. line terminators, "\n") (Firefox bug 1130860).
* The `Regexp` `global`, `ignoreCase`, `multiline`, and `sticky` properties are now prototype accessor properties rather than own data properties of `RegExp` instances (Firefox bug 1120169).
* The `RegExp.prototype.source` property is now prototype accessor property rather than own data property of `RegExp` instances (Firefox bug 1120169). Available only in non-Release version, due to Firefox bug 1150297.
* `Function.prototype.toString()` now throws for `Proxy` objects (Firefox bug 1100936).
### Interfaces/APIs/DOM

* The Fetch API `fetch()` method has been implemented (Firefox bug 1039846).
* `BroadcastChannel` API has been implemented and is available in Web Workers (Firefox bug 966439 and Firefox bug 1121420).
* The Console API is now available in Web Workers.
* `CanvasRenderingContext2D.clearHitRegions()` has been implemented (Firefox bug 1119527).
* Constants of `KeyboardEvent.location`, `DOM_KEY_LOCATION_MOBILE` and DOM\_KEY\_LOCATION\_JOYSTICK, have been removed, since they were removed from the DOM Level 3 Spec (Firefox bug 936313.
* `KeyboardEvent.code` is now available; previously it was only available in prerelease builds. (Firefox bug 1126673)
* `KeyboardEvent.code` now supports special keys on Sun keyboards on Linux, Android, and Firefox OS. (Firefox bug 1020139)
* The `TextEncoder()` constructor has been changed to match the spec: when an invalid parameter is passed, the `RangeError` `DOMException` is now raised, rather than the erroneous `TypeError` (Firefox bug 1125766).
* The User Timing API, adding `Performance.mark()`, `Performance.clearMarks()`, `Performance.measure()`, and `Performance.clearMeasures()` has been implemented (Firefox bug 782751).
* The prefixed version of `indexedDB`, `mozIndexedDB` has been removed (Firefox bug 975699).
* The `DOMContentLoaded` event is no longer cancelable (Firefox bug 1134559).
* You can now use WebSockets in Workers (Firefox bug 504553).
* The `XMLHttpRequest.responseType` and `XMLHttpRequest.withCredentials` properties can now be set before calling `XMLHttpRequest.open()` (Firefox bug 707484).
### MathML

*No change.*

### SVG

*No change.*

### Audio/Video

*No change.*

Networking
----------

*No change.*

Security
--------

* In Firefox, the `autocomplete``=false` attribute is now ignored when dealing with a login form (Firefox bug 1025703). This is intended to encourage the use of more secure passwords by allowing password manager tools to work more reliably.
* RC4 is now disabled when using TLS, except for a few specifically allowed websites. This whitelist is an interim measure until those sites are fixed (Firefox bug 1124039). This fallback is controlled by the `security.tls.unrestricted_rc4_fallback` preference, `true` by default for the moment (Firefox bug 1138882).
* Websites needing to fall back to an insecure version of TLS in order to work are now in a hardcoded whitelist which will shrink over time (Firefox bug 1114816). The whitelist can be disabled by setting `security.tls.insecure_fallback_hosts.use_static_list` to `false`.
Changes for add-on and Mozilla developers
-----------------------------------------

### Add-on SDK

#### Highlights

* `sdk/context-menu@2` was implemented (Firefox bug 1070952).
* `sdk/addon/bootstrap` was implemented (Firefox bug 1075541).
* `sdk/windows/loader` was removed (Firefox bug 970135).
* Fix for default language detection on Linux (Firefox bug 1114712).
* `toolkit/loader` now has opt-in module compatibility checking, which is enabled for all jpm add-ons (Firefox bug 1037235).

#### Electrolysis (E10s) updates

* `sdk/page-worker` e10s updates (Firefox bug 1116004).
* `sdk/content/worker` e10s updates (Firefox bug 1116544).
* `sdk/tabs` e10s updates (Firefox bug 1033838).

#### Details

* GitHub commits made between Firefox 37 and Firefox 38.
### XUL

*No change.*

### JavaScript code modules

#### Downloads.jsm

* `DownloadTarget` objects now have `exists` and `size` properties, allowing you to determine the existence of and the size of the download's target file on disk, as well as a new `refresh()` method, which asks that these values be updated.
### XPCOM

* `"@mozilla.org/network/atomic-file-output-stream;1"` and `"@mozilla.org/network/safe-file-output-stream;1"` now throw an exception if `PR_APPEND` is passed without `PR_TRUNCATE` (Firefox bug 1117580).
* `nsICompositionStringSynthesizer` and `nsIDOMWindowUtils.sendCompositionEvent()` have been removed. Instead, use `nsITextInputProcessor`. (Firefox bug 917322)
* `nsIDOMWindowUtils.sendKeyEvent()` is now deprecated. Instead, use `nsITextInputProcessor` (Firefox bug 1119609).
Older versions
--------------

* 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 12 for developers
* Firefox 11 for developers
* Firefox 10 for developers
* Firefox 9 for developers
* Firefox 8 for developers
* Firefox 7 for developers


Firefox 34 for developers - Mozilla

Firefox 34 for developers
=========================

Firefox 34 was released on December 1st, 2014. 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:

* Storage Inspector: a new tool enabling you to view data stored by web pages
* Performance tool: revamped Profiler UI and frame rate timeline
* Frame switching: point the developer tools at a specific iframe in the page
* console.table support
* jQuery events are visible in the Page Inspector

All devtools bugs fixed between Firefox 33 and Firefox 34.

### CSS

* Our experimental implementation of CSS Fonts Level 3 progresses. Newly implemented features are:
    + the fallback algorithm of `font-variant-position`, creating synthetic alternates for missing glyphs, based on the subscript and superscript metrics supplied by the font (Firefox bug 1024804).
    + The `layout.css.font-features.enabled` preference has been removed, meaning the following properties have been activated by default:
        - The CSS Font Level 3 version of `font-variant` which is now a shorthand property.
        - The longhand properties `font-variant-caps`, `font-variant-numeric`, `font-variant-position`, `font-variant-east-asian`, `font-variant-ligatures`, and `font-variant-alternates`.
        - The properties `font-kerning` and `font-synthesis`
        - The properties `font-feature-settings` and `font-language-override` are unprefixed. The prefixed version are still available for some time to ease transition.
* The value `auto` has been added to `min-width` and `min-height` with a different behavior than the last time (Firefox bug 984711 and Firefox bug 1015474).
* An experimental implementation, disabled by default, of the filter functional values of the `filter` property have been implemented. It is controlled by the `layout.css.filters.enabled` pref (Firefox bug 948265).
* Fixed starting of CSS transitions that start together with changes to `display`, `position`, `overflow`, and similar properties (Firefox bug 625289)
### HTML

*No change.*

### JavaScript

* The ES2015 syntax for computed property names on object literals has been implemented (Firefox bug 924688).
    + This includes getter and setter method names as well (Firefox bug 1048384) and can also be used with destructuring.
* The ES2015 shorthand syntax for defining methods on objects has been implemented (Firefox bug 924672).
* The ES2015 `Object` method `Object.assign()` has been implemented (Firefox bug 937855).
* ES2015 template strings and the `String.raw()` method are now supported (Firefox bug 1038259, Firefox bug 1039774).
* A new ES2015 object `WeakSet` has been added (Firefox bug 792439).
* ES2015 Symbols (only available in the Nightly channel) have been updated to conform with recent specification changes (Firefox bug 1042602):
    + When trying to convert a symbol to a number, a `TypeError` will be thrown now.
    + When using loose equality, `Object(sym) == sym` returns `true` now.
* The experimental `TypedArray.prototype.move()` method (only available in former Nightly and Aurora channels) has been replaced with the now implemented standard ES2015 `TypedArray.prototype.copyWithin()` method (Firefox bug 1021379).
* In strict mode, setting a duplicate property name in object literals will no longer throw a `SyntaxError` as per ES2015 specification (Firefox bug 1041128).
* In regular expressions (including `String.replace`), the matched text for a capturing group is now `undefined` instead of the empty string when that capturing group didn't get consulted because quantifiers prevented its exercise (see Firefox bug 369778 and this example code). Note that due to web compatibility, RegExp.$N will still return an empty string (Firefox bug 1053944).
* The ES2015 spread operator is now supported in destructuring (Firefox bug 933276).
* Destructuring now uses iterator protocol instead of array-like protocol (Firefox bug 933276).
* `Proxy.revocable()` has been implemented (Firefox bug 978279).
### Interfaces/APIs/DOM

* The `Element.matches()` method has been added; it does what the non-standard `mozMatchesSelector()` was doing (Firefox bug 886308).
* The `Performance.now()` method is now available to Web workers (Firefox bug 908390).
* The non-standard interface `MozNamedAttrMap` has been renamed to the standard `NamedNodeMap` and `Element.attributes` has been adapted to use it (Firefox bug 1055467).
* The `Path2D.addPath()` method has been added (Firefox bug 985801).
* The non-standard Device Storage API is now also enabled for privileged apps installed on Android (Firefox bug 886627).
* Web Crypto API has been enabled by default (Firefox bug 1074001).
* The `MediaStreamTrack.stop()` method has been added (Firefox bug 1057955).
* Our experimental implementation of EME continues. The `MediaKeySession.getUsableKeyIds()` method has been added (Firefox bug 1057171).
* Regarding WebRTC:
    + an experiment implementation of `RTPSender` and `RTPReceiver` working with `RTCPeerConnection` has landed (Firefox bug 1032835).
    + application window sharing has been added to `Navigation.getUserMedia()` (Firefox bug 1036653) and `MediaTrackConstraintSet` now supports `browserWindow` and `scrollWithPage` allowing to chose the tab of a window that has to be shared without showing the tab chooser dialog (Firefox bug 1041700).
    + `"browser"` is now an accepted value of MediaSourceEnum, used to define constraints (Firefox bug 1041493).
* For Web Components, event retargeting is now implemented (Firefox bug 887541).
* The `Headers` interface has been implemented (Firefox bug 1029620). It is controlled by the `dom.fetch.enabled` preference which is set to `false` by default.
* Regarding our experimental implementation of Web Animations, the `AnimationEffect` interface has been added, with the single `AnimationEffect.name` property (Firefox bug 1045993). Web Animations is not activated by default and is controlled by the `dom.animations-api.core.enabled` preference.
* CSSOM View smooth scrolling methods have been added: `Window.scroll()`, `Window.scrollTo()`, and `Window.scrollBy()` (Firefox bug 1022818).
* The non-standard `MozSmsSegmentInfo` is no more visible on the global object Firefox bug 916607.
### MathML

*No change.*

### SVG

*No change.*

### Audio/Video

*No change.*

Security and Networking
-----------------------

* SSLv3 is now disabled by default (Firefox bug 1030963).
* A warning is sent to the console when a website use the CSS `reflected-xss` directive (Firefox bug 1045902).
Changes for add-on and Mozilla developers
-----------------------------------------

* localstore.rdf has been removed (Firefox bug 559505).
### Add-on SDK

#### Highlights

* New API: dev/panel enables you to extend the Firefox Developer Tools.
* jpm beta released.
* `"./my-file"` introduced everywhere as an alias for `require("sdk/self").data.url("my-file")`
* Added the ability to attach stylesheets to individual tabs.

#### Details

GitHub commits made between Firefox 33 and Firefox 34. This will not include any uplifts made after this release entered Aurora.

Bugs fixed between Firefox 33 and Firefox 34. This will not include any uplifts made after this release entered Aurora.

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

* 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 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 96 for developers - Mozilla

Firefox 96 for developers
=========================

This article provides information about the changes in Firefox 96 that affect developers. Firefox 96 was released on January 11, 2022.

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

### HTML

No notable changes

### CSS

* The `hwb()` function for use as a CSS color value has been implemented. The `hwb()` functional notation expresses a given color according to its hue, whiteness, and blackness. An optional alpha component represents the color's transparency. (Firefox bug 1352755).
* Firefox now provides support for the `color-scheme` property. This allows an element to indicate which color schemes it can comfortably be rendered in. Common options include "light" and "dark", or "day mode" and "night mode". (Firefox bug 1576289).
* The `counter-reset` property now supports the `reversed()` function for creating *reversed* CSS counters, which are intended for numbering elements in descending order.
 This can be used with the `list-item` counter to automatically number ordered lists in reverse order, starting from the number of elements in the list
 (`list-item` is a counter that is automatically applied for ordered lists, such as those created using `<ol>`).
 Firefox uses this feature internally to support the `<ol>` `reversed` attribute.
 (Firefox bug 1706346).
### JavaScript

No notable changes.

### HTTP

No notable changes.

### APIs

* `navigator.canShare()` is now supported on Android, allowing code to check whether `navigator.share()` will succeed for particular targets.
 The feature is behind a preference on desktop operating systems.
 (Firefox bug 1666203).
* The Web Locks API is enabled by default, allowing web apps running in multiple tabs or workers to coordinate the use of resources. (Firefox bug 1740044).

#### Canvas

* Image encoder support has been added for the WebP image format.
 This allows canvas elements to export their content as webp data when using the methods: `HTMLCanvasElement.toDataURL()`, `HTMLCanvasElement.toBlob()`, and `OffscreenCanvas.toBlob`.
 (Firefox bug 1511670).

#### DOM

* The `IntersectionObserver()` constructor now sets the default `rootMargin` if an empty string is passed in the associated parameter option, instead of throwing an exception (Firefox bug 1738791).

#### Media, WebRTC, and Web Audio

* A number of deprecated non-standard statistics fields have been removed from the WebRTC Statistics API, including: `bitrateMean`, `bitrateStdDev`, `framerateMean`, `framerateStdDev`, and `droppedFrames`.
 (Firefox bug 1367562).
### WebDriver conformance (Marionette)

* Added the command `WebDriver:GetElementShadowRoot` to retrieve the shadow root (open or closed) hosted by a given element (Firefox bug 1700073).
* Fixed a bug in `WebDriver:ExecuteScript` and `WebDriver:ExecuteAsyncScript` that caused a `cyclic object value` error when trying to return the `ShadowRoot` of an element (Firefox bug 1489490).
* `WebDriver:Print` has been enhanced to support page ranges when printing documents as PDF (Firefox bug 1678347).
Changes for add-on developers
-----------------------------

* Added `runtime.getFrameId` that gets the frame ID of any window global or frame element from a content script (Firefox bug 1733104).
Older versions
--------------

* 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
* 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 104 for developers - Mozilla

Firefox 104 for developers
==========================

This article provides information about the changes in Firefox 104 that will affect developers. Firefox 104 was released on August 23, 2022.

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

### HTML

No notable changes.

### CSS

No notable changes.

### JavaScript

* The methods `Array.prototype.findLast()`, `Array.prototype.findLastIndex()`, `TypedArray.prototype.findLast()`, and `TypedArray.prototype.findLastIndex()` are now supported.
 These are used to find the value and index (respectively) of the last element in an `Array` or `TypedArray` that matches a supplied test function.
 (See Firefox bug 1775026 for more details.)
* Serialization of native Error types additionally includes the `stack` property when used with `window.postMessage()` and `structuredClone()` (on error types that include `stack`).
 The `stack` is not yet serialized when errors are sent using other APIs, such as `Worker.postMessage()`
 (See Firefox bug 1774866 for more details.)
### HTTP

No notable changes.

### Security

No notable changes.

### APIs

#### DOM

* `HTMLElement.focus()` now supports the parameter `option.focusVisible`, which can be used force a browser to display visual indication after the element is focused.
 Note that browsers may automatically provide visual indication on focused elements if the implementation determines that it will improve accessibility.
 (See Firefox bug 1765083 for more details.)

#### Canvas

* The `fontKerning` property is now supported on `CanvasRenderingContext2D` and `OffscreenCanvasRenderingContext2D`, enabling developers to specify how kerning is used when text is drawn to a canvas or an offscreen canvas (Firefox bug 1778908).

#### SVG

* The `SVGStyleElement.disabled` property can now be used to disable or enable an SVG style element, or to check its disabled state.
 This mirrors the behavior of `HTMLStyleElement.disabled`.
 (See Firefox bug 1712623 for more details.)

#### Removals

* The `options` argument to the `IDBFactory.open()` method has been removed.
 This option provided a non-standard, and Firefox-only way to make the indicated database persistent.
 The option was previously deprecated, and users that need this functionality should already have migrated to `StorageManager.persist()`.
 (See Firefox bug 1354500 for more details.)
### WebAssembly

No notable changes.

### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Added support for `source` to the `log.entryAdded` event (Firefox bug 1770792).
* Updated the `url` sent for `browsingContext.contextCreated` events to be `about:blank` for newly opened browsing contexts (Firefox bug 1775141).

#### Marionette

* Improved stability and performance when minimizing or restoring windows on Linux (Firefox bug 1780212).
* Added support for `touch` actions (Firefox bug 1543337).
Changes for add-on developers
-----------------------------

No notable changes.

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

* 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
* 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 67 for developers - Mozilla

Firefox 67 for developers
=========================

This article provides information about the changes in Firefox 67 that will affect developers. Firefox 67 was released on May 21, 2019.

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

### Developer tools

* Debugger updates:
    + Column breakpoints allow you to select the specific point (or column) in a line of code where you want the debugger to break (Firefox bug 1528417).
    + Log points allow you to log specific information to the console during code execution without pausing execution and without the need to change the code.
    + The map scopes feature allows you to view the variables from the original source.
    + You can debug worker threads directly in the debugger.
* Web Console updates:
    + Navigate details in the console using the keyboard (Firefox bug 1424159).
    + Cmd + K will now clear the console of its contents on macOS (Firefox bug 1532939).
    + When the user clears the console, the error messages cache is cleared as well (Firefox bug 717611).
    + The user can import existing modules into the current page using import (Firefox bug 1517546).
    + A new context menu item allows the user to use the **Copy Link Location** command (Firefox bug 1457111).
    + Clicking a link in the Console causes the same behavior that it would in a content window (Firefox bug 1466040).
    + Clicking the source link for a code file in the Console panel navigates to the Debugger if debugger knows the file (Firefox bug 1447244).
    + When the user has filtered the contents of the console, an icon will be added to the filter text box to clear the filter (Firefox bug 1525821).
* Network Monitor enhancements:
    + The Header panel of the Network monitor will now display a notification for resources belonging to a known tracker (Firefox bug 1485416).
    + In the Network monitor request columns, you can control the visible columns and column sorting. The context menu now includes a command to restore the list sort parameters to the default (Firefox bug 1454962).
    + You can change the width of the columns in the Network Monitor to suit your workflow (Firefox bug 1358414).

#### Removals

* The following Developer Tools panels have been removed (see Deprecated tools for details):
    + Canvas debugger (Firefox bug 1403938).
    + Shader editor (Firefox bug 1342237).
    + WebAudio editor (Firefox bug 1403944).
* The following Developer Tools have been deprecated (see Deprecated tools for details):
    + WebIDE (Firefox bug 1539462).
    + Connect… page (Firefox bug 1539462).
### HTML

* `<input>` elements with `autocomplete="new-password"` set on them will no longer have previously saved passwords auto-filled (Firefox bug 1119063).
### CSS

* The `revert` keyword has been implemented (Firefox bug 1215878).
* The `break-word` value of the `word-break` property is now supported (Firefox bug 1296042).
* The `prefers-color-scheme` media feature is now supported (Firefox bug 1494034).
* Custom `cursor`s of greater than 32px in size are now disallowed, to mitigate potential malware uses of large cursors (Firefox bug 1445844).

#### Removals

* Use of the proprietary `-moz-binding` property is now restricted to chrome and UA-stylesheets (Firefox bug 1523712).
### SVG

*No changes.*

### JavaScript

* `String.prototype.matchAll` has been implemented and enabled by default (Firefox bug 1435829, Firefox bug 1531830).
* Support for the dynamic module `import()` proposal is now available by default (Firefox bug 1517546).
* The hashbang grammar proposal is now implemented (Firefox bug 1519097).
### APIs

#### DOM

* The default value for `Response.statusText` is now `""` (Firefox bug 1508996).
* User gestures are now preserved for rejected calls to `Document.requestStorageAccess`, as well as fulfilled calls (Firefox bug 1522912).

#### DOM events

* CSS transition (Firefox bug 1530239) and animation (Firefox bug 1531605) events now fire on disabled (e.g. form) elements.
* `InputEvent.data` and `InputEvent.dataTransfer` have been implemented (Firefox bug 998941).
* The `insertFromPasteAsQuotation` `InputEvent.inputType` value is now supported (Firefox bug 1532527).

#### Workers/Service workers

* Strict MIME type checks are now enforced on scripts imported by `WorkerGlobalScope.importScripts()` (Firefox bug 1514680).

#### Media, Web Audio, and WebRTC

* The AV1 video codec is now supported on Linux.
* dav1d is now the default media decoder for AV1 (see for example Firefox bug 1533742 and Firefox bug 1535038).
* Calling `RTCPeerConnection.addTrack()` without specifying any streams to which to add the new track now works as expected: it adds a streamless track to the connection. Each peer is responsible for managing the association between the track and any stream on its end (Firefox bug 1231414).
* The `MediaDeviceInfo.groupId` property is now implemented (Firefox bug 1213453). While it has existed in Firefox since Firefox 39, it did not actually gather related devices together into the same group IDs.
* The `RTCIceCandidate.usernameFragment` property is now implemented (Firefox bug 1490658).
* WebVTT has been revised to correctly use `auto` as the default for the `VTTCue` object's `positionAlign` property, instead of `center`. This causes the cue box's alignment to correspond to the alignment of the text within it (Firefox bug 1528420).

#### Canvas and WebGL

* The `EXT_float_blend` WebGL extension has been enabled by default (Firefox bug 1535808).

#### Removals

* The deprecated `ShadowRoot.getElementsByTagName`, `ShadowRoot.getElementsByTagNameNS`, and `ShadowRoot.getElementsByClassName` properties (part of Shadow DOM v0) have been removed (Firefox bug 1535438).
* `document.createEvent("TouchEvent")`, `document.createTouch()`, `document.createTouchList()`, and the `ontouch*` event handler properties have been disabled on desktop to improve web compatibility on websites where touch support is used for mobile detection (Firefox bug 1412485). In such cases, websites have been seen to behave incorrectly or unexpectedly on touchscreen laptops.
### Security

* Notifications are now only available in a secure context (Firefox bug 1429432).
* Firefox now blocks the loading of external protocol URLs in `<iframe>`s (Firefox bug 1527882).
### WebDriver conformance (Marionette)

#### API changes

* Made `WebDriver:SendAlertText` conformant to the WebDriver specification (Firefox bug 1502360).

#### Bug fixes

* `WebDriver:NewWindow` will no longer timeout because inconsistencies across platforms regarding the `focus` event (Firefox bug 1523234).

#### Others

* Both `WebDriver:ExecuteScript` and `WebDriver:ExecuteAsyncScript` now use `Promises` internally (Firefox bug 1398095).
* `WebDriver:NewSession` returns Firefox's `BuildID` string as part of the capabilities object (Firefox bug 1525829).
Changes for add-on developers
-----------------------------

### API changes

* Using the `proxy.settings.set()` method to change ``BrowserSetting`` values will throw an exception unless the extension was granted private window access by the user (Firefox bug 1525447).
### Manifest changes

* A new manifest key, incognito, defines the behavior of an extension in private browsing windows or tabs (Firefox bug 1511636).
* The `toolbar_field_highlight` setting controls the background color used to indicate the current selection of text in the URL bar (Firefox bug 1450114).
* The `toolbar_field_highlight_text` setting controls the text color used to indicate the current selection of text in the URL bar (Firefox bug 1450114).
See also
--------

* Hacks release post: Firefox 67: Dark Mode CSS, WebRender, and more
Older versions
--------------

* 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 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 56 for developers - Mozilla

Firefox 56 for developers
=========================

Firefox 56 was released on September 28, 2017. This article lists key changes that are useful for web developers.

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

### Developer Tools

* Display Negative Line Numbers in CSS Grid Inspector (Firefox bug 1369942).
* The new CSS Grid Layout Panel is now available, allowing much better CSS Grid debugging facilities (Firefox bug 1181227). See Powerful New Additions to the CSS Grid Inspector in Firefox Nightly for more details.
### HTML

* Implemented the `labels` property for labelable form controls, for example `HTMLInputElement.labels` (Firefox bug 556743).
* Implemented `<link rel="preload">`; see Preloading content with rel="preload" for more details (Firefox bug 1222633). Note that currently Firefox only supports preloading of cacheable resources.
### CSS

* Implemented the proprietary Mozilla-specific `<color>` values `-moz-win-accentcolor` and `-moz-win-accentcolortext` (see Firefox bug 1344910), and the proprietary media query `-moz-windows-accent-color-in-titlebar` (see Firefox bug 1379938).
### SVG

*No changes.*

### JavaScript

* The Intl API has been enabled on Firefox for Android (Firefox bug 1344625).
### APIs

#### New APIs

*No changes.*

#### DOM

* On Mac, `Document.hidden` is now true when the window is behind another non-translucent application Firefox bug 1236512.
* The `Gamepad.displayId` property has been implemented (Firefox bug 1375816).
* The `PerformanceTiming.secureConnectionStart` property has been implemented (Firefox bug 772589).
* Firefox used to accept `iso-2022-jp-2` sequences silently when an `iso-2022-jp` `TextDecoder()` was instantiated, however this has now been removed to simplify the API, as no other browsers support it and no pages seem to use it. (Firefox bug 715833).
* The 4ms clamping behavior of `setTimeout()` and `setInterval()` has been updated to be more in line with other browsers, as described in Timeouts throttled to >=4ms (Firefox bug 1378586).
* The Page Visibility API's `onvisibilitychange` handler has been added (Firefox bug 1333912).
* The `Window.showModalDialog()` method has been removed (Firefox bug 981796).
* The implementation of the `HTMLFormElement.action`, `HTMLInputElement.formAction`, and `HTMLButtonElement.formAction` properties has been updated so that they return the correct form submission URL, as per spec (Firefox bug 1366361).

#### DOM events

* `onwheel` is now available on `HTMLElement` — it wasn't before (Firefox bug 1370550).

#### Media and WebRTC

* Firefox now supports the `RTCPeerConnection` properties which let you examine the current and pending configurations of the local and remote ends of the connection, to help manage changes in configuration: `currentLocalDescription`, `pendingLocalDescription`, `currentRemoteDescription`, and `pendingRemoteDescription`.
* Hardware encoding of media is now enabled by default on Android; it was available but disabled by default in Firefox 55 (Firefox bug 1386974). This supports higher-efficiency encoding of VP8 media on devices that provide support for it. This saves battery life and processor power, generally improving the performance of the user's device.

#### Canvas and WebGL

* The `CanvasRenderingContext2D.drawImage()` method has been updated so that smoothing occurs when downscaling even if `imageSmoothingEnabled` is `false`. This is not mandatory as per spec, but follows Chrome's behavior. See Firefox bug 1360415.
* An `SVGImageElement` can now be used as the image source in a `drawImage()` call (Firefox bug 1382027).
### Security

*No changes.*

### Plugins

* Firefox for Android has removed all support for plugins (bug 1381916).
### Other

* Gecko now encodes URLs internally as punycode, to avoid URL encoding problems (see Firefox bug 945240, also see discussion in Firefox bug 942074).
* Firefox on Windows and macOS can now be made to run in headless mode using the `-headless` flag (see Firefox bug 1355150 and Firefox bug 1355147).
Removals from the web platform
------------------------------

### HTML

* The `<isindex>` element has been removed from the HTML parser, and from form submission (Firefox bug 1266495).
* The `<applet>` element has been removed (Firefox bug 1279218).
### APIs

*No changes.*

### SVG

*No changes.*

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

### WebExtensions

* browsingData.RemovalOptions gets "hostnames" option for cookies
* browsingData.settings() and browsingData.removeCookies() are now supported on Firefox for Android
* browserSettings.cacheEnabled
* browser\_style usage is changed
* chrome\_settings\_overrides.search\_provider.is\_default
* contextMenus renamed to menus
* cookies.set() and cookies.remove() now work in private browsing mode
* devtools.panels.elements.onSelectionChanged
* downloads.open() can now only be called from a user action
* FindProxyForURL "DIRECT" return type no longer takes an argument
* history.onVisited now includes the page title if it is known.
* management.get() and management.getAll()
* menus now supports the "tools\_menu" context
* menus.OnClickData now has "linkText"
* menus.create() now has an "icons" option
* notifications.onShown
* pageAction.show() and pageAction.hide() are now supported on Firefox for Android
* permissions now supports "unlimitedStorage"
* privacy.services now includes passwordSavingEnabled
* privacy.websites.referrersEnabled
* protocol\_handlers now supports "gopher"
* proxy.registerProxyScript() is renamed to proxy.register()
* proxy.unregister()
* runtime.onInstalled gets `temporary` flag
* tabs.print(), tabs.PageSettings, tabs.printPreview(), tabs.saveAsPDF()
* tabs.Tab.lastAccessed
* theme.reset()
* windows.create() and windows.update() now support prefacing window title
Older versions
--------------

* 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 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 100 for developers - Mozilla

Firefox 100 for developers
==========================

This article provides information about the changes in Firefox 100 that will affect developers. Firefox 100 was released on May 3, 2022.

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

### HTML

No notable changes.

### CSS

* CSS media features for `dynamic-range` and `video-dynamic-range` are now supported. You can now test whether a user agent or an output device supports the combination of brightness, contrast ratio, and color depth by using `dynamic-range` and in the video plane by using `video-dynamic-range` (Firefox bug 1751217).
### JavaScript

No notable changes.

### HTTP

#### Removals

* The non-standard `Large-Allocation` HTTP header has been removed (Firefox bug 1598759).
### APIs

* `WritableStream`, `WritableStreamDefaultWriter`, `WritableStreamDefaultController`, and `ReadableStream.pipeTo()` are now supported (Firefox bug 1759597).

#### DOM

* Code can now use the static method `AbortSignal.timeout()`.
 This returns an `AbortSignal` that can be used to automatically abort an operation with `TimeoutError` after a specified time (Firefox bug 1753309).
### WebAssembly

* WebAssembly now supports exceptions that can be thrown and caught in either WebAssembly or JavaScript (or some other runtime), crossing between the environment boundaries if not handled.
 The JavaScript representations of WebAssembly exceptions are WebAssembly.Exception and WebAssembly.Tag (Firefox bug 1759217).
### WebDriver conformance (Marionette)

* Added support for user prompts (e.g. `alert`) on Android (Firefox bug 1708105).
Changes for add-on developers
-----------------------------

* The `color_scheme` and `content_color_scheme` properties are added to theme manifest key and available in the `theme` API. These properties enable a theme to override whether a light or dark color scheme is automatically applied to the chrome or content (Firefox bug 1708105).
* You can now create a muted tab using `tabs.create()` with the new `muted` property in the `createProperties` object (Firefox bug 1372100).
* Support added for `runtime.onSuspend` and `runtime.onSuspendCanceled` improving support for event page features (Firefox bug 1753850).
Older versions
--------------

* 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
* 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 30 for developers - Mozilla

Firefox 30 for developers
=========================

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

### Developer Tools

* A Box Model Highlighter has been implemented (Firefox bug 663778).
* Anywhere a DOM node appears in the console output, it is highlighted when you hover over that console output (Firefox bug 757866). Similarly all JS functions and objects are highlighted in the console output (Firefox bug 584733). More information about the console improvement can be found in this blog post.
* Support for `console.count()` has been added (Firefox bug 922208).
### CSS

* The property `background-blend-mode` has been enabled by default (Firefox bug 970600).
* The non-standard `overflow-clip-box` property has been implemented for use in UA stylesheets only (Firefox bug 966992).
* The `line-height` property now affects single-line text inputs (`<input type=text|password|email|search|tel|url|unknown>` types) although it cannot shrink them below a line height of `1.0` (Firefox bug 349259).
* The `line-height` property now also affects `type=button`, with no restrictions (Firefox bug 697451).
* Change to keyframes' name does not affect current elements (Firefox bug 978648).
* positioned internal table elements not abs pos containing block(relative position for table rows) (Firefox bug 63895).
### HTML

*No change.*

### JavaScript

* New ES2015-compatible array comprehensions `[for (item of iterable) item]` and generator comprehensions `(for (item of iterable) item)` have been implemented (Firefox bug 979865).
* Typed arrays are now extensible and support new named properties (Firefox bug 695438).
* The `Error.prototype.stack` property now contains column numbers (Firefox bug 762556) and has been improved when using `Function()` and `eval()` calls. This can help you to better debug minified or generated JavaScript code.
* The `Promise.cast()` method has been renamed to `Promise.resolve()` (Firefox bug 966348).
### Interfaces/APIs/DOM

* `Navigator.sendBeacon` has been implemented, easing telemetry collection (Firefox bug 936340).
* Added a `relList` property returning a `DOMTokenList` to `HTMLLinkElement`, `HTMLAreaElement` and `HTMLAnchorElement` (Firefox bug 968637).
* As per the latest specification, the first argument of `AudioScheduledSourceNode.start` and `AudioScheduledSourceNode.stop` is now optional and defaults to `0` (Firefox bug 982541).
* The method `Navigator.requestWakeLock()` and the non-standard `MozWakeLock` are no longer available from the Web on Desktop (Firefox bug 963366).
* The `DOM_VK_ENTER` constant has been removed from `KeyboardEvent` (Firefox bug 969247).
* Web components' `Document.register()` has been adapted to follow the behavior described in the latest version of the specification (Firefox bug 856140).
* The non-standard, and deprecated since Firefox 15, `Blob.mozSlice` is no longer supported (Firefox bug 961804).
* The non-standard `ArchiveReader` and `ArchiveRequest` are no longer exposed to the Web (Firefox bug 968883).
* WebIDL constructors cannot be called as functions anymore. They need to be preceded by the keyword `new`. (Firefox bug 916644)
* Added support for a new value (`alpha`) for the second, optional, parameter of the `HTMLCanvasElement.getContext()` method allowing to define if alpha blending must be stored or not for this context. When not, the per-pixel alpha value in this store is always `1.0`. This allows the back-end to implement a fast-track. (Firefox bug 982480)
* `WorkerGlobalScope.console` now returns for the regular `console`; `WorkerConsole` has been removed (Firefox bug 965860).
* The `WebGL_debug_shaders` WebGL extension has been implemented (Firefox bug 968374).
### MathML

*No change.*

### SVG

* `<feDropShadow>`, and its interface `SVGFEDropShadowElement`, from the Filter Effects Module are now supported (Firefox bug 964200).
### Audio/Video

* On Linux, Gstreamer 1.0 is now supported (instead of 0.10) (Firefox bug 806917).
Security
--------

*No change.*

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

* The interface `nsIDOMWindowUtils` now supports the Boolean attribute `audioMuted` and `audioVolume`, a float in the range `[0.0 , 1.0]`, allowing to control the sound produced by a window (that is any tab or iframe). There is no UI for this, but is available to add-ons. (Firefox bug 923247)
### Older versions

* 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 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 92 for developers - Mozilla

Firefox 92 for developers
=========================

This article provides information about the changes in Firefox 92 that will affect developers. Firefox 92 was released on September 7, 2021.

**Note:** See also Time for a review of Firefox 92 on Mozilla Hacks.

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

### HTML

No changes

### CSS

* The keywords `avoid-page` and `avoid-column` are now supported for the `break-inside` property (Firefox bug 1722945).
* The two-value syntax for the `font-size-adjust` property is now supported (Firefox bug 1720131).
* The `@font-face/size-adjust` descriptor is now supported (Firefox bug 1720131).
* The CSS `accent-color` property has been implemented (Firefox bug 1722031).
* The `system-ui` value is now supported for the `font-family` property (Firefox bug 1226042).
### JavaScript

* `Object.hasOwn()` can be used to test whether a property was defined on an object or inherited (Firefox bug 1721149).
* The default 5MB storage quota is now available to each origin. The quota previously applied to an entire domain group (also known as eTLD+1 domain; e.g., `*.wikipedia.org`). (Firefox bug 1064466).
* Storage quotas for `Window.localStorage` are now shared with IndexedDB API and `Cache API` (Firefox bug 742822).
### HTTP

* Firefox will automatically upgrade an HTTP request to HTTPS when a usable HTTPS RR is available.
 It will also use information provided in an *HTTPS RR* to optimize the process of establishing HTTPS connections—this is conceptually similar to using the `Alt-Svc` header.
 (Firefox bug 1721132).
### APIs

* The `disabledFeatures` static property has been implemented for Custom Elements (Firefox bug 1723396).

#### DOM

* The Imperative Slotting API (part of the Shadow DOM API) Has been implemented. (Firefox bug 1705141)
* You can now monitor for changes to text selections in `<input>` or `<textarea>` by listening for `selectionchange` events in `HTMLInputElement` and `HTMLTextAreaElement`, respectively (Firefox bug 1648944).

#### Media, WebRTC, and Web Audio

* Access to audio output devices, like speakers and headphones, is now protected by the speaker-selection feature policy (Firefox bug 1577199).
### WebDriver conformance (Marionette)

* Improved support for the `webSocketUrl` capability, which now returns the WebDriver BiDi websocket URL if `true` was passed and if BiDi is supported. (Firefox bug 1692984).
Changes for add-on developers
-----------------------------

* Support for `cookieStoreId` is added to `downloads.download`, `downloads.DownloadQuery`, and `downloads.DownloadItem`. The addition to the types `downloads.DownloadQuery` and `downloads.DownloadItem` provides support in `downloads.search` and `downloads.erase`. Web extensions can now associate downloads with specific cookie stores, such as container tabs (contextual identities). (Firefox bug 1669566)
Older versions
--------------

* 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
* 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 9 for developers - Mozilla

Firefox 9 for developers
========================

Firefox 9 was released for Windows on December 20, 2011. Mac and Linux version 9.0.1, which fixed a crashing bug discovered at the last minute, were released on December 21, 2011.

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

### HTML

* The `value` attribute of `<li>` now can be negative. Previously negative values were converted to 0.
* You can now specify the start and stop time of media in the URI of the media when using `<audio>` and `<video>` elements.
* `<input>` and `<textarea>` elements now respect the value of the `lang` attribute when invoking the spell checker.
* Firefox on Android now lets users snap photos with their phone's camera without leaving the browser when the `<input>` element is used with `type="file"` and `accept="image/*"`.
* Windows Vista style PNG ICO images are now supported.
* Drawing images that use the `crossorigin` attribute to request CORS access no longer incorrectly taint the canvas when CORS is granted.
* The value of the `rowspan` attribute may now be as large as 65,534, up from 8190.
### CSS

* The `font-stretch` property is now supported.
* The `columns` property is now supported, with the `-moz` prefix. This is a shorthand for the following properties: `column-width` and `column-count`.
* When a stylesheet included using the `<link>` element has been fully loaded and parsed (but not yet applied to the document), a `load` event is now fired. Also, if an error occurs processing a style sheet, an `error` event is fired.
* You can now specify overflow settings for both the left and right edges of content using a new two-value syntax for `text-overflow`.
### JavaScript

*No change.*

### DOM

Using fullscreen mode

The new fullscreen API provides a way to present content using the entire screen, with no browser interface. This is great for video and games. This API is currently experimental and prefixed.

* The `Node.contains()` method is now implemented; this lets you determine if a given node is a descendant of another node.
* The `Node.parentElement` attribute has been implemented; this returns the parent `Element` of a DOM node, or `null` if the parent isn't an element.
* DOM Level 3 composition events are now supported.
* The `Document.scripts` attribute has been implemented; this returns an `HTMLCollection` of all the `<script>` elements on the document.
* The `Document.queryCommandSupported()` method has been implemented.
* The set of events that can be listened for on `<body>` elements has been revised to match the latest draft of the HTML5 specification. The list of events in the DOM event reference reflects which events can be listened for on `<body>`.
* The `readystatechange` event is now fired only on the `Document`, as intended.
* Event handlers are now implemented as standard IDL interfaces. For most cases, this won't affect content, but there are exceptions.
* A new response type, "`moz-json`", has been added to `XMLHttpRequest`, letting `XMLHttpRequest` automatically parse JSON strings for you; when you request this type, a returned JSON string is parsed, so that the value of the `response` property is the resulting JavaScript object.
* `XMLHttpRequest` "progress" events are now reliably sent for every chunk of data received; in the past it was possible for the last chunk of data received to not fire a "progress" event. Now you can track progress by following only "progress" events, instead of also having to monitor "load" events to detect the receipt of the last chunk of data.
* In the past, calling `addEventListener()` with a `null` listener would throw an exception. Now it returns without error and with no effect.
* The new `navigator.doNotTrack` property lets your content easily determine whether or not the user has enabled their do-no-track preference; if this value is "yes", you should not track the user.
* `Range` and `Selection` objects now behave according to their specifications when `splitText()` and `normalize()` are called.
* The value of `Node.ownerDocument` for doctype nodes is now the document on which `createDocumentType()` was called to create the node, instead of `null`.
* `window.navigator.taintEnabled` has been removed; it has not been supported in many years.
### Workers

* Workers implemented in blob URLs were broken in Firefox 8, and work again starting in Firefox 9.
### WebGL

* The WebGL context `drawingBufferWidth` and `drawingBufferHeight` attributes are now supported.
### MathML

* The non-standard `restyle` value for the `actiontype` attribute on `<maction>` elements has been removed.
* While still unsupported, using the `mlabeledtr` element no longer breaks rendering completely. See Firefox bug 689641 for progress on actual support of this element.
### Networking

* You can now send the contents of JavaScript typed arrays (that is, the contents of an `ArrayBuffer` object) using XMLHttpRequest.
* WebSocket connections now permit non-characters in otherwise valid UTF-8 data frames to be received, instead of failing.
* The HTTP `Accept` header for XSLT requests has been changed to "\*/\*" for simplicity. Since fetching XSLT has always fallen back to "\*/\*" anyway, it made sense to simplify the initial request.
* Attempts by a server to use the `301 Moved Permanently` or `307 Temporary Redirect` response codes to redirect the user to a `javascript:` URI now result in a "bad connection" error instead of actually redirecting. This prevents certain types of cross-site scripting attacks.
* Content served with an empty `Content-Disposition` were previously treated as if the `Content-Disposition` were "attachment"; this didn't always work as expected. These are now handled as if the `Content-Disposition` were "inline".
* The default maximum size of an item in the disk cache has been increased to 50 MB; previously, only items up to 5 MB were cached.
### Developer tools

* The web console now supports basic string substitutions in its logging methods.
* You can now create visually nested blocks of output in the web console, to help make it easier to read.
Changes for Mozilla and add-on developers
-----------------------------------------

See Updating add-ons for Firefox 9 for an overview of the changes you may need to make to get your add-ons working in Firefox 9.

### XUL

* The `<xul:tab>` element now has a `pending` attribute, whose value is `true`, when the tab is in the process of being restored by the session store service. This can be used for styling the tab in themes. The attribute isn't present on tabs that aren't pending.
* The `<xul:tab>` element now has an `unread` attribute, whose value is `true`, when the tab has changed since the last time it was the active tab or if it hasn't been selected since the current session began. The attribute isn't present on tabs that are not unread.
* You can now use a `<xul:panel>` as a drag image for DOM drag and drop operations. This lets you use the standard drag & drop API for drag and drop of XUL content.
* The `<xul:notificationbox>` element's `appendNotification`) method now lets you specify a callback that gets called for interesting events related to the notification box. Currently, the only event is "removed", which tells you the box has been removed from its window.
### JavaScript code module changes

* `FileUtils.jsm` now has a `File` constructor that returns an `nsIFile` object representing a file specified by its pathname.
### Service changes

* The content preference service now handles private mode browsing (see Firefox bug 679784).
### NSPR

* NSPR now has an "append" module, which lets you append new data to the end of an existing log.
### Interface changes

#### Removed interfaces

* `nsIGlobalHistory3` has been removed during streamlining of the Places and DocShell code.

#### Miscellaneous interface changes

* The `nsISound` interface has a new constant, `EVENT_EDITOR_MAX_LEN`. The allows for playing the system sound for when more characters than the maximum allowed are typed into a text field. Currently, this is only used on Windows.
* The `nsIScriptError2` interface has new `timeStamp` and `innerWindowID` properties; in addition, the `initWithWindowID()` method now takes an inner window ID instead of an outer window ID.
* The `nsIBidiKeyboard.haveBidiKeyboards` attribute has been added; this lets you determine if the system has at least one keyboard installed for each direction: left-to-right and right-to-left.
* The new `nsIEditor.isSelectionEditable` attribute lets you determine if the current selection anchor is editable. This helps to support cases where only parts of the document are editable, by letting you see if the current selection is in an editable section.
* The `nsIBrowserHistory.registerOpenPage()` and `nsIBrowserHistory.unregisterOpenPage()` methods have been removed as part of a performance overhaul in the Places system. You can use the corresponding methods in `mozIPlacesAutoComplete` instead.
* The `nsIDOMWindowUtils.wrapDOMFile()` method has been added; this returns a DOM `File` object for a given `nsIFile`.
* The `nsIChromeFrameMessageManager.removeDelayedFrameScript()` method was added to support removing delayed load scripts. Bootstrapped add-ons should use this, at shutdown, to remove any scripts it loaded using `nsIChromeFrameMessageManager.loadFrameScript()` with the delayed load flag set. This is exposed to add-ons as `browser.messageManager.removeDelayedFrameScript()`.
* The `nsIAppStartup` interface has a new `interrupted` attribute, which lets you know if the startup process was interrupted at any point by an interactive prompt. This can be helpful, for example, when timing startups during performance evaluation, to be able to drop numbers from sessions that were interrupted.
* The `nsIEditorSpellCheck` interface has been revised to support per-site selection of spell checker dictionaries.
### IDL parser

The IDL parser no longer includes support for the never fully-implemented notion of unique pointers.

### Build system changes

* The `--enable-application=standalone` option for building standalone XPConnect has been removed; it hasn't worked since 2007 anyway.
* Support for building Necko and Transformiix XSLT standalone has been removed; you can no longer use `--enable-application=network` or `--enable-application=content/xslt`.
* The build system now looks for `.mozconfig` at `$topsrcdir/.mozconfig` or `$topsrcdir/mozconfig`, and nowhere else, unless you override the `.mozconfig` path using the `MOZCONFIG` environment variable.
* The `xpidl` utility has been replaced in the SDK with `pyxpidl`.
### Other changes

* The spell checker no longer has an arbitrary 130-character word-length limit on the length of words it will attempt to spell check. This limit was previously in place to prevent crashes that were occurring in the spell checker, but the underlying bugs have since been fixed.
* You can now register components to add features to the `window.navigator` object by using the "JavaScript-navigator-property" category.
See also
--------

* 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