Firefox 57 (Quantum) for developers - Mozilla

Firefox 57 (Quantum) for developers
===================================

This article provides information about the changes in Firefox 57 (a.k.a. Firefox Quantum) that will affect developers. Firefox 57 was released on November 14, 2017.

Firefox 57 === Firefox Quantum
------------------------------

Firefox 57 has been given the release name **Quantum**, after the Firefox Quantum engineering project that has aimed to rebuild Firefox from the ground up, bringing with it major performance, stability, and visual improvements. This is the first version of Firefox to ship some of these improvements, so we wanted to mark the occasion.

**Note:** To read more about the Quantum features in this release, see Firefox Quantum Developer Edition: the fastest Firefox ever with Photon UI and better tooling by Dan Callahan.

Firefox's new parallel CSS engine — also known as **Quantum CSS** or **Stylo** — is enabled by default in Firefox 57 for desktop, with Mobile versions of Firefox to follow later on. Developers shouldn't notice anything significantly different, aside from a whole host of performance improvements. There are however a number of minor functional differences in Stylo, implemented to fix non-standard Gecko behavior that should be eliminated. We will report on such differences on reference pages and in the release notes as appropriate (see Quantum CSS notes).

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

### Developer Tools

*No changes.*

### HTML

* The date and time `<input>` types are now enabled in all builds (Firefox bug 1399036).
### CSS

* The `minimal-ui` and `standalone` values of the `display-mode` media query are now supported (Firefox bug 1369815). See also the Web app manifest `display` field.
* The `grid-row-gap` and `grid-column-gap` properties are no longer reset by the `grid` shorthand (Firefox bug 1387410).
* The `layout.css.clip-path-shapes.enabled` preference has been removed (Firefox bug 1399767). This preference allowed disabling the `<basic-shape>` support in `clip-path`. This support was shipped in Firefox 54 and can no longer be disabled.

#### Quantum CSS notes

Following bugs have been fixed in Quantum:

* Radial gradient values like `radial-gradient(circle gold,red)` will work in the old Gecko style system, even though they shouldn't because of the missing comma between `circle` and `gold` (Firefox bug 1383323).
* When you animate an offscreen element onscreen but specify a delay, Gecko does not repaint on some platforms, e.g. Windows (Firefox bug 1383239).
* In Gecko, `<details>` elements can't be made open by default using the `open` attribute if they have an `animation` active on them (Firefox bug 1382124).
* In Gecko, `transitions` will not work when transitioning from a `text-shadow` with a color specified to a `text-shadow` without a color specified (Firefox bug 726550).
* In Gecko, cancelling a filling animation (e.g. with `animation-fill-mode: forwards` set) can trigger a transition set on the same element, although only once (see Firefox bug 1192592 and these test cases for more information). In general declarative animations should not trigger transitions.
* Animations using em units are not affected by changes to the `font-size` on the animated element's parent in Gecko, whereas they should be (Firefox bug 1254424).
* Gecko also deals with `font-size` inheritance differently from Quantum CSS, meaning that for some language settings inherited font sizes end up being smaller than expected (see Firefox bug 1391341).
* Gecko reuses the same mechanism used when parsing a url-token when parsing the `domain()` or `url-prefix()` URL matching functions for a `@-moz-document` rule. Quantum CSS does not use the same mechanism and it does not consider tokens invalid when they contain brackets or quotes (Firefox bug 1362333).
* In Gecko, when you set a system font as the value of a canvas 2D context's `font` (e.g. `menu`), getting the font value fails to return the expected font (it returns nothing). This has been fixed in Quantum. (Firefox bug 1374885).
* In Gecko, when you create a detached subtree (e.g. a `<div>` created using `createElement()` that is not yet inserted into the DOM), the subtree's root element is set as a block-level element. In Quantum CSS this is set as inline, as per spec (Firefox bug 1374994).
* In Gecko, `calc()` expressions are rejected — causing the value to be invalid — when used as the radius component of a `gradient/radial-gradient()` function (Firefox bug 1376019).
* In Gecko, `calc(1*2*3)` is not parsed successfully; Quantum CSS fixes this (Firefox bug 1379467).
* In Quantum CSS, `calc()` is supported everywhere that the spec explains it should be (Firefox bug 1350857). In Gecko it is not.
* Gecko has a bug whereby the `::before` and `::after` pseudo-elements are still generated even if the `content` property value is set to `normal` or `none`. As per spec, they shouldn't be (Firefox bug 1387931).
* Another Gecko bug means that the `background-position` property can't be transitioned between two values containing different numbers of `<position>` values, for example `background-position: 10px 10px;` and `background-position: 20px 20px, 30px 30px;` (see Firefox bug 1390446).
### SVG

*No changes.*

### JavaScript

* The non-standard `for each...in` loop, originally part of EcmaScript for XML (E4X), has been removed. Please use `for...of` instead and see Warning: JavaScript 1.6's for-each-in loops are deprecated for migration help. (Firefox bug 1083470).
* The `Object.prototype.watch()` and `unwatch()` methods are deprecated, will now throw a warning when used, and will be removed soon (Firefox bug 934669).
* The non-standard `Iterator` and `StopIteration` objects as well as the legacy iteration protocol have been removed (Firefox bug 1098412).
* Async generator is now enabled (Firefox bug 1352312).
* for await (... of ...) syntax is now enabled (Firefox bug 1352312).
### APIs

#### New APIs

* The `PerformanceObserver` API is now enabled by default (Firefox bug 1386021).
* The `AbortController` and `AbortSignal` interfaces (known as the Abort API) have been added, allowing DOM requests (such as fetch requests) to be aborted if desired (Firefox bug 1378342).
* [2] The Storage API is implemented and enabled by default (Firefox bug 1399038).

#### DOM

* The `Selection.type` property of the Selection API is now implemented (Firefox bug 1359157).
* `Document.createEvent('FocusEvent')` is now supported (Firefox bug 1388069).
* The `files` property of the `HTMLInputElement` interface is now settable (Firefox bug 1384030).
* The `HTMLDocument.getSelection()` method has been moved to the `Document` interface so it is available to XML documents (Firefox bug 718711).
* The `messageerror` event is now implemented, and can have code run in response to it firing via event handlers implemented on message targets — see `MessagePort.messageerror_event`, `DedicatedWorkerGlobalScope.messageerror_event`, `Worker.messageerror_event`, `BroadcastChannel.messageerror_event`, and `Window.messageerror_event` (Firefox bug 1359017).
* When `Headers` values are iterated over, they are automatically sorted in lexicographical order, and values from duplicate header names are combined (Firefox bug 1396848).

#### DOM events

*No changes.*

#### Media and WebRTC

* Support for messages of arbitrary size (up to 1GiB, although 256kiB is more interoperable) is now supported on `RTCDataChannel` through use of the end-of-record (EOR) flag on SCTP messages. See Understanding message size limits for more information (Firefox bug 979417).

**Note:** Because Firefox doesn't yet support the SCTP ndata protocol that provides the ability to interleave SCTP messages from multiple sources, sending large data objects can cause significant delays on all other SCTP traffic. See Firefox bug 1381145 to track progress on implementing and deploying ndata support in Firefox.
* The `RTCDataChannel.send()` method can now throw a `TypeError` exception if the size of the message you're trying to send is not compatible with the receiving user agent (this is implemented as part of Firefox bug 979417).
* The MediaStream Recording API has been updated so that `error` events sent to report problems that occur while recording are now of type `MediaRecorderErrorEvent` rather than being generic events.
* Updated the documentation around `OfflineAudioContext` since its constructor's inputs can now be specified in an object rather than as a list of parameters (Firefox bug 1388591).
* The Web Audio API now properly supports multi-channel output (Firefox bug 1378070).
### Security

* `resource://` URLs no longer leak information (Firefox bug 863246)
* Data URLs are now treated as unique opaque origins, rather than inheriting the origin of the settings object responsible for the navigation (Firefox bug 1324406).
### Plugins

*No changes.*

### Other

* Firefox headless mode now includes a `-screenshot` flag that allows you to take website screenshots directly from the command line (Firefox bug 1378010).
Removals from the web platform
------------------------------

### HTML

* `<link rel="preload">` (see Preloading content with rel="preload") has been disabled in Firefox 57 because of various web compatibility issues (e.g. Firefox bug 1405761). An improved version that works for non-cacheable resources is expected to land in Firefox 58.
### APIs

* Mozilla's proprietary Social API has been completely removed (Firefox bug 1388902).
### SVG

*No changes.*

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

**Note:** Starting in Firefox 57, all support for XPCOM-based add-ons has been removed. All extensions must be converted into the new browser extensions (also known as WebExtensions) or they will not work.

### WebExtensions

The following APIs have been added or extended:

* `bookmarks`
    + support for separators through `bookmarks.BookmarkTreeNodeType`
* `browser_action`
    + `theme_icons` property for light/dark theme icons
* `browserAction`
    + `browserAction.openPopup()`
* `browserSettings`
    + `allowPopupsForUserEvents`
    + `homepageOverride`
    + `imageAnimationBehavior`
    + `newTabPageOverride`
* `browsingData`
    + `browsingData.removeLocalStorage()`
* `clipboard`
    + `setImageData()`
* `contextualIdentities`
    + `onCreated`
    + `onRemoved`
    + `onUpdated`
    + `colorCode` and `iconUrl` in `contextualIdentities.ContextualIdentity`
* `devtools.panels`
    + `devtools.panels.ElementsPanel.createSidebarPane()`
* `downloads`
    + `incognito` option in `downloads.download()`
    + `estimatedEndTime` property in `downloads.DownloadItem`
* `find`
    + `find()`
    + `highlightResults()`
    + `removeHighlighting()`
* `pageAction.openPopup()`
* `privacy`
    + `websites.trackingProtectionMode`
* `proxy`
    + `FindProxyForURL()` can now return an object
* `runtime`
    + `runtime.openOptionsPage()` support on Android
* `sessions`
    + `setTabValue()`
    + `getTabValue()`
    + `removeTabValue()`
    + `setWindowValue()`
    + `getWindowValue()`
    + `removeWindowValue()`
* `sidebarAction`
    + `sidebarAction.open()`
* `storage`
    + `storage.managed`
* `tabs`
    + `loadReplace` option in `tabs.update()`
    + `discarded` property in `tabs.Tab`, `tabs.onUpdated`, and `tabs.query()`
    + `tabs.create()` can open "view-source:" URLs
    + `openerTabId` property in `tabs.Tab`, `tabs.create()`, `tabs.query()`, and `tabs.update()`
* `theme`
    + `colors.toolbar`
    + `colors.toolbar_field`
    + `colors.toolbar_field_text`
    + `colors.toolbar_text`
* `theme`
    + `windowId` option to `theme.update()`
* `webRequest`
    + `filterResponseData()`
    + `proxyInfo` property in `webRequest` events
* `windows`
    + `allowScriptsToClose` option in `windows.create()`
Older versions
--------------

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

Firefox 101 for developers
==========================

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

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

### HTML

No notable changes.

### CSS

* The `prefers-contrast` media feature that is used to detect whether the user has specified a preference for higher (`more`) or lower (`less`) contrast in the presentation of web content is now available by default. This feature now also lets users specify a set of colors to use for the contrast through the new `custom` value (Firefox bug 1656363).
* Three new viewport sizes have been introduced: small (`s`), large (`l`), and dynamic (`d`). These new sizes have added new viewport-percentage length units in addition to the existing ones - `vh`, `vw`, `vmax`, and `vmin`. The new viewport-percentage length units include `svh`, `lvh`, `dvh`, `svw`, `lvw`, `dvw`, `svmax`, `lvmax`, `dvmax`, `svmin`, `lvmin`, and `dvmin` (Firefox bug 1610815). Additionally, the units `vb` and `vi` are now supported by default (Firefox bug 1610815).
* Support for the `inline-size` value for the `contain` property has been added. For more information, see (Firefox bug 1755565).
### JavaScript

No notable changes.

### APIs

#### DOM

* `HTMLMediaElement.preservesPitch` is now supported without the `moz` prefix.
 `mozPreservesPitch` is now an alias of `preservesPitch`, but is deprecated, and may be removed in future releases (Firefox bug 1652950).
* `HTMLInputElement.showPicker()` is now supported, allowing the picker for an input element to be displayed when a user interacts with some other element, such as a button (Firefox bug 1745005).
* `DOMException` is now a serializable object, so it can be cloned with `structuredClone()` or copied between workers using `postMessage()` (Firefox bug 1561357).
* *Constructable stylesheets* are now supported, making it much easier to create reusable stylesheets for use with Shadow DOM.
 The update includes the addition of a `CSSStyleSheet()` constructor for creating new stylesheets, the `CSSStyleSheet.replace()` and `CSSStyleSheet.replaceSync()` methods that can be used to add/replace CSS rules in the sheet, and the `Document.adoptedStyleSheets` and `ShadowRoot.adoptedStyleSheets` properties that are used to share sheets to a document and its shadow DOM subtrees.
 See Firefox bug 1520690 for more information.

#### Media, WebRTC, and Web Audio

* AV1 codec parameters are now properly parsed in media support queries.
 This means that `MediaCapabilities.decodingInfo()`, `HTMLMediaElement.canPlayType()`, and `MediaSource.isTypeSupported()` will now accurately report support for playback for AV1 sources based on the provided codec parameters.
 `MediaCapabilities.decodingInfo()` will also use the information to accurately report on "efficient decoding" of AV1 videos.
 For more information, see Firefox bug 1757861.
* `maxFramerate` is now supported for setting the maximum framerate that can be used to send an encoding (in `RTCPeerConnection.addTransceiver()` and `RTCRtpSender.setParameters()`).
 Note that zero if a valid frame rate value, but is interpreted by Firefox as "no frame rate limit".
 For more information, see Firefox bug 1611957.

#### SVG

* SVG images in the Firefox UI that are styled using `prefers-color-scheme` will respect the `color-scheme` of the embedder (previously `prefers-color-scheme` ignored the `color-scheme` of the embedder and triggered off either the device or browser theme).
 This ensures that a favicon, for example, is always styled to match the theme of the elements that nest it, and not necessarily the (potentially different) theme of the device. (Firefox bug 1764354).
### WebDriver conformance (WebDriver BiDi, Marionette)

Starting with this release of Firefox the WebDriver BiDi protocol will be enabled by default. A WebDriver BiDi session can be requested by using WebDriver classic (geckodriver, Marionette) and setting the `webSocketURL` capability to `true` when creating a new WebDriver session. The same capability will then contain the WebSocket end-point for BiDi clients to connect to.

The following commands and events are available:

* Adds the `session` module including a partial implementation for the commands to globally subscribe (`session.subscribe`) to and unsubscribe (`session.unsubscribe`) from events, and the ability to create a direct WebDriver BiDi session (`session.new`) when not using WebDriver classic.
* Adds the `browsingContext` module including the commands to open a new tab or window (`browsingContext.create`) or close such one (`browsingContext.close`), retrieve open browsing contexts (`browsingContext.getTree`) and to navigate within a browsing context (`browsingContext.navigate`). There is also support for the event when a browsing context got created (`browsingContext.contextCreated`).
* Adds the `log` module including support for log events (`log.entryAdded`).

For more information, see the full bug list.

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

* Addition of the `storage.StorageArea.onChanged` event that enables you to listen for changes in content in the `local` and `sync` storage areas (Firefox bug 1758475).
* Manifest V3 preview features:
    + Addition of the `scripting` API, which provides features to execute a script, insert and remove CSS, and manage the registration of content scripts (Firefox bug 1687764). This API is available to Manifest V3 extensions and takes over the execute script and insert and remove CSS features from the `tabs` API.
    + Addition of the `action` API, which takes over the features of the `browserAction` API in Manifest V3 extensions. Corresponding addition of the `"action"` manifest key and `_execute_action` special shortcut to the manifest `commands` key. Note that the `browserAction` API and `"browser_action"` manifest key are only available in Manifest V2 extensions.
    + The `"background"` manifest key property `"persistent"` can be set to `false` under the control of preferences: for Manifest V2, the `extensions.eventPages.enabled` preference, and in Manifest V3, the `extensions.manifestV3.enabled` preference.
    + Addition of the `"host_permissions"` manifest key, which is available for Manifest V3 extensions.
    + The content script execution environment has changed for Manifest V3 extensions:
        - Content scripts can no longer rely on host permissions to perform cross-origin requests. Cross-origin requests from content scripts are possible with CORS.
        - The `content` object (that offered `content.fetch`, `content.XMLHttpRequest`, and `content.WebSocket`) is removed from the content script execution environment.
Older versions
--------------

* 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 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers


Firefox 31 for developers - Mozilla

Firefox 31 for developers
=========================

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

### Developer Tools

Highlights:

* Eyedropper tool to select colors in web pages
* full stack traces for console error messages
* editable Box Model View
* %c formatting to style console messages
* "copy as cURL" command in Network Monitor
* Sublime Text keybindings in the source editor
* Option to make Network Monitor logs persistent
* JavaScript warnings on by default in the Web Console
* Alt+click to expand all descendants of a node

All devtools bugs fixed between Firefox 30 and Firefox 31.

### CSS

* Changed `var-` prefix of CSS Variables to `--` to reflect the final spec change (Firefox bug 985838).
* The `hyphens` property now support Polish hyphenation rules (Firefox bug 987668).
* Removed an unwanted white space for multiple of 10,000 in Korean counter styles (Firefox bug 985186).
* CSS opacity transition broken with parent pseudo :before and overflow auto (Firefox bug 990340).
* The `::-moz-math-stretchy` pseudo-element has been removed (Firefox bug 1000879).
### HTML

* `<track>` has been implemented (Firefox bug 629350).
### JavaScript

New ECMAScript 2015 features implemented:

* New `Array` built-in: `Array.prototype.fill()` (Firefox bug 911147)
* New `Math` function: `Math.clz32()` (Firefox bug 925123)
* New `String` built-in: `String.prototype.normalize()` is available in Firefox Desktop (Firefox bug 918987).
* New `Object` method `Object.setPrototypeOf()`.
* New `Number` constants: `Number.MAX_SAFE_INTEGER` and `Number.MIN_SAFE_INTEGER`.
* The ES2015 Proxy `isExtensible` trap have been implemented (Firefox bug 978235).
### Interfaces/APIs/DOM

* Constructor of `KeyboardEvent` has been implemented (Firefox bug 930893).
* The Resource Timing API has been implemented (see Firefox bug 822480).
* `KeyboardEvent.isComposing` attribute has been implemented (Firefox bug 993234).
* `InputEvent` interface has been implemented (Firefox bug 993253).
* `InputEvent.isComposing` attribute has been implemented (Firefox bug 993253).
* `CSS.escape()` has been implemented (Firefox bug 955860).
* `mousemove` is now cancelable like in other browsers (Firefox bug 704423). Calling `preventDefault()` only sets `defaultPrevented` attribute to `true;` any other behaviors are not changed. E.g., it cannot prevent to set `:hover` state.
* The `Path2D` interface has been implemented.
* The `CanvasRenderingContext2D.isPointInPath()`, `CanvasRenderingContext2D.isPointInStroke()`, `CanvasRenderingContext2D.clip()`, `CanvasRenderingContext2D.fill()` and `CanvasRenderingContext2D.stroke()` methods have been updated to optionally accept a `Path2D` object.
* Implemented `HTMLMediaElement.fastSeek()`.
* The `Connection` interface has been renamed to `NetworkInformation` and has been modified to match the new specification (Firefox bug 960426).
* The `Navigator.sendBeacon()` has been implemented; this allows asynchronous transmission of analytics or other data in a manner that doesn't rely on the transmitting page remaining loaded, so that it can be used in an `unload` or `beforeunload` handler.
### MathML

* Partial implementation of the OpenType MATH table, section 6.3.6 (Firefox bug 407059). For details, try the MathML torture test .
* The `::-moz-math-stretchy` pseudo-element has been removed (Firefox bug 1000879).
* When available, the Unicode Mathematical alphanumeric characters are used for bold, italic and bold-italic math variants (Firefox bug 930504).
### SVG

*No change.*

### Audio/Video

*No change.*

Security
--------

* Privileged code now gets Xray vision for `Date` instances.
Changes for add-on and Mozilla developers
-----------------------------------------

* The "`align`" attribute on the `urlbar-wrapper` (formerly on the `urlbar-container`) which was set to "`center`" since time immemorial, has been removed. This is known to affect third-party themes. You should look carefully at what the right fix is for your theme, but for maintaining the equivalent effect, you can add the following CSS rule to your theme:

```css
#urlbar-wrapper {
  -moz-box-align: center;
}
```

* `nsIDOMWindowUtils.sendQueryContentEvent()` and `nsIDOMWindowUtils.sendSelectionSetEvent()` have `aAdditionalFlags` as optional argument. If you called `nsIDOMWindowUtils.sendSelectionSetEvent()` with `true` for `aReverse`, the behavior would be broken by this change. See explanation of each flag (`QUERY_CONTENT_FLAG_*` and `SELECTION_SET_FLAG_*`) for the detail of `aAdditionalFlags`.
### Add-on SDK

Highlights:

* Add-on Debugger
* Added the ability to convert between high-level BrowserWindow objects and DOM windows, and between high-level Tab objects and XUL tabs.
* Updated the default theme used for panels on Mac OS X.
* Added contentStyle and contentStyleFile options to panel.

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

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

### Older versions

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

Firefox 93 for developers
=========================

This article provides information about the changes in Firefox 93 that will affect developers. Firefox 93 was released on October 5, 2021.

**Note:** See also Lots to see in Firefox 93 on Mozilla Hacks.

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

### HTML

* The ARIA `meter` role has been implemented (Firefox bug 1727616).
* The UI for `<input type="datetime-local">` has been implemented. (Firefox bug 1283388).
### CSS

* The `small-caps` keyword is now supported for the `font-synthesis` property (Firefox bug 1706080).
### JavaScript

* Class `static` initialization blocks are now supported, allowing more flexible initialization of `static` properties (Firefox bug 1725689).
* The properties `imageOrientation` and `premultiplyAlpha` can be passed to the method `createImageBitmap()` using the `options` object (Firefox bug 1367251).
* `Intl.supportedValuesOf()` is now supported, allowing code to enumerate values supported by an implementation, This might be used, for example, to download a polyfill for just the missing category of values (Firefox bug 1670033).
### HTTP

* The SHA-256 algorithm is now supported for HTTP Authentication using digests. This allows much more secure authentication than previously available using the MD5 algorithm (Firefox bug 472823).
* The default HTTP `ACCEPT` header for *images* changed to: `image/avif,image/webp,*/*` (following addition of support for the AVIF image format). (Firefox bug 1682995).
### APIs

* `ElementInternals.shadowRoot` and `HTMLElement.attachInternals` are now supported (Firefox bug 1723521).
* The value `device-pixel-content-box` is now supported for `ResizeObserver.Observe()` (Firefox bug 1587973).
* The `reportError()` global function is now supported, allowing scripts to report errors to the console or global event handlers, emulating an uncaught JavaScript exception (Firefox bug 1722448).

#### Events

* The `onsecuritypolicyviolation` global event handler property is now supported.
 This can be used to assign a handler for processing `securitypolicyviolation` events fired when there is a Content Security Policy violation (Firefox bug 1727302).
* The `onslotchange` event handler property is now supported on `HTMLSlotElement` and `ShadowRoot`.
 This can be used to assign a handler for processing `slotchange` events, which are fired on `<slot>` elements when the node(s) contained in the slot change (Firefox bug 1501983).

#### Removals

* `KeyboardEvent.initKeyEvent()` has been moved behind the preference `dom.keyboardevent.init_key_event.enabled` and is disabled by default.
 The method is not present in any current specification or supported in other current browsers (Firefox bug 1717760).
### WebDriver conformance (Marionette)

* Fixed a bug which caused `WebDriver:Print` to fail for large documents (Firefox bug 1721982).
Changes for add-on developers
-----------------------------

* Sidebars are now included in `extension.getViews` when `windowId` is specified (Firefox bug 1612390).
Other
-----

* Support for AVIF images is now enabled by default (Firefox bug 1682995).
 This format has excellent compression and no patent restrictions (it was developed by the Alliance for Open Media).
 Firefox can display still images, with colorspace support for both full and limited range colors, and image transforms for mirroring and rotation.
 The preference image.avif.compliance\_strictness can be used to adjust the compliance strictness with the specification. Animated images are not supported.
Older versions
--------------

* 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 64 for developers
* Firefox 63 for developers
* Firefox 62 for developers


Firefox 18 for developers - Mozilla

Firefox 18 for developers
=========================

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

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

### HTML

* The `reversed` attribute of the `<ol>` element is now supported (Firefox bug 601912).
* The `crossorigin` attribute of the `<link>` element is now supported (Firefox bug 786564).
* The `allowfullscreen` attribute of the `<iframe>` has been implemented and it's prefixed predecessor `mozallowfullscreen` is now deprecated.
### CSS

* The `min-width` and `min-height` now uses the `auto` keyword as *initial value* (This has an effect only on flex items as it resolves to `0`, the previous initial value, for other items). (Firefox bug 763689)
* The cascade has been updated: now author `!important` rules override CSS animations. (Firefox bug 783714)
* The `background` shorthand property now recognizes CSS3 `background-size` property specified inside. (Firefox bug 570326)
* Initial support for the CSS Flexbox Module has been landed. It is disabled by default but can be enabled by setting `layout.css.flexbox.enabled` to true (Firefox bug 666041).
### DOM/APIs

* `navigator.mozPay` has been landed. (Firefox bug 767818)
* `window.devicePixelRatio` has been landed. (Firefox bug 564815)
* The MacOS X backend for `window.navigator.battery` has been implemented. (Firefox bug 696045)
* `MozBlobBuilder` is removed. Developers need to use `Blob` constructor for creating a `Blob` object. (Firefox bug 744907)
* The `visibilitychange` event and the Page Visibility API has been unprefixed (Firefox bug 812086).
* `TextDecoder` and `TextEncoder` have been added. Note that the implementation and spec of these evolved and have been changed in Firefox 19 (Firefox bug 764234).
* `HTMLMediaElement.src` has been separate in two properties: the standard `src` property, dealing with strings, and the prefixed `mozSrcObject` property, dealing with media streams (Firefox bug 792665).
* Support for transferable objects.
* The `Screen.lockOrientation()` method now supports an `Array` of strings as argument (Firefox bug 784549.
### JavaScript

* Harmony's (ECMAScript 2015) Direct Proxies have been landed (Firefox bug 703537). Warning: the implementation contains a couple of known bugs, missing features and misalignments with the current state of the spec. Do not rely on it for production code.
* The ECMAScript 2015 `contains()` method is now implemented on strings. This is unfortunately not compatible with Mootools 1.2, which expects different behavior from `contains()` on strings but does not ensure it. Newer versions of Mootools fix this issue; sites should upgrade their Mootools version to something newer than 1.2.
### WebGL

* The prefixed version of the `EXT_texture_filter_anisotropic` WebGL extension, "MOZ\_EXT\_texture\_filter\_anisotropic" has been removed (Firefox bug 790946).
### SVG

### MathML

### XUL

### Network

* Quality factors ("q-values") are now clamped to 2 digits (e.g. in HTTP `Accept-Language` headers) (Firefox bug 672448).
* The `ALLOW-FROM` syntax of the `X-FRAME-OPTIONS` HTTP Response header is now supported (Firefox bug 690168).
### Developer tools

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

### Interface changes

`nsIStreamListener`

The 4th parameter (aOffset) of `onDataAvailable()` method changes to unsigned long long. (Firefox bug 784912)

`nsIUploadChannel`

`setUploadStream()` supports over 2GB content-length (Firefox bug 790617)

`nsIEditor`

`addEditorObserver()` has been removed, use `setEditorObserver()` instead, `removeEditorObserver()` no longer takes a `nsIEditorObserver` parameter (Firefox bug 785091)

`nsIHttpProtocolHandler`

`http-on-modify-request` observers are no longer guaranteed to be called synchronously during `nsIChannel.asyncOpen()`.
 For observers that need to be called during `asyncOpen()`, the new `http-on-opening-request` observer topic has been added. `See` (Firefox bug 800799)

`nsIProtocolProxyService`

The `resolve` method has been removed. Now, only the `asyncResolve` method can be used. See (Firefox bug 769764)

#### New interfaces

#### Removed interfaces

The following interfaces have been removed.

* `nsIEditorObserver`
See also
--------

* Firefox 18 Beta Release Notes
* Aurora 18: HiDPI & Touch Events (Mozilla Hacks)
* Add-on Compatibility for Firefox 18 (Add-ons Blog)
### Older versions

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

Firefox 53 for developers
=========================

Firefox 53 was released on April 19, 2017. This article lists key changes that are useful not only for web developers but also for Firefox and Gecko developers, as well as add-on developers.

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

### Developer Tools

* Avoid scrolling latency on highlighters given by APZ (Firefox bug 1312103).
* Added option to copy the full CSS path of an element (Firefox bug 1323700).
* Devtools support for css-color-4 (Firefox bug 1310681).
* Markup view: add a visual hint between opening and closing tags of a collapsed node (Firefox bug 1323193).
### CSS

#### New features

* The `mask-*` longhand properties (see CSS Masks) are all supported and available by default (see Firefox bug 1251161).
* Added `caret-color` property (Firefox bug 1063162).
* Implemented the `place-items`/`place-self`/`place-content` shorthands (Firefox bug 1319958).
* Added `flow-root` value to `display` property (Firefox bug 1322191).
* `-moz-tab-size` now accepts `<length>` values (Firefox bug 943918), and is now animatable (Firefox bug 1308110).
* `mask-mode`:luminance doesn't work on gradient masks (Firefox bug 1346265).
* [css-grid] FR Unit in `grid-template-rows` not filling viewport (Firefox bug 1346699).
* flex items aren't sorted according to "order", if they're separated by an abspos sibling (Firefox bug 1345873).

#### Other changes

* Enable mask longhands on SVG elements (Firefox bug 1319667).
* [css-grid] Fixed: `align-self`/`justify-self:stretch`/`normal` doesn't work on `<table>` grid items (Firefox bug 1316051).
* Fixed: `clip-path: circle()` with large reference box and percentage radius does not render correctly (Firefox bug 1324713.
* When applying a `text-transform` value of `uppercase` to Greek text, the accent on the disjunctive eta (ή) is no longer removed (see Firefox bug 1322989).
* The availability of the `contents` value of `display` was controlled through the `layout.css.display-contents.enabled` pref. In Firefox 53, this pref has been removed altogether, so the value will always be available and can no longer be disabled (Firefox bug 1295788).
### JavaScript

* ECMAScript 2015 semantics for the `Function.name` properties have been implemented. This includes inferred names on anonymous functions (`var foo = function() {}`) (Firefox bug 883377).
* ECMAScript 2015 semantics for closing iterators have been implemented. This affects the `for...of` loop, for example (Firefox bug 1147371).
* The Template Literal Revision proposal that lifts escape sequence restrictions on tagged template literals has been implemented (Firefox bug 1317375).
* The static `length` property of `TypedArray` objects was changed from 3 to 0 as per ES2016 (Firefox bug 1317306).
* `SharedArrayBuffer` can now be used in `DataView` objects (Firefox bug 1246597).
* In earlier versions of the specification, `SharedArrayBuffer` objects needed to be explicitly transferred during structured cloning. In the new specification, they aren't transferable objects anymore and thus must not be in the transfer list. The new behavior used to present a console warning only, but will now throw an error (Firefox bug 1302037).
* The `ArrayBuffer` length is now limited to `Number.MAX_SAFE_INTEGER` (>= 2 \*\* 53) (Firefox bug 1255128).
* `Error` and other native error object prototypes like `RangeError` etc. are now ordinary objects instead of proper Error objects. (In particular, `Object.prototype.toString.call(Error.prototype)` is now `"[object Object]"` instead of `"[object Error]"`.) (Firefox bug 1213341).
### Events

* CSS Transitions: The `transitionstart`, `transitionrun`, and `transitioncancel` events have been implemented (see Firefox bug 1264125 and Firefox bug 1287983).
* The `CompositionEvent` constructor has been implemented (see Firefox bug 1002256).
* The `MouseEvent.x` and `MouseEvent.y` aliases of `MouseEvent.clientX`/`MouseEvent.clientY` have been implemented (see Firefox bug 424390).
* The `auxclick` event and corresponding event handler have been implemented (see Firefox bug 1304044).
* The `transitioncancel` event is now fired after a transition is cancelled.
### DOM

* The `pathname` and `search` properties of links (like for `<a>` and `<link>` elements' interfaces previously returned the wrong parts of the URL. For example, for a URL of `http://z.com/x?a=true&b=false`, `pathname` would return "`/x?a=true&b=false"` and `search` would return "", rather than "`/x`" and "`?a=true&b=false"` respectively. This has now been fixed (Firefox bug 1310483).
* The `URLSearchParams()` constructor now accepts a string or sequence of strings as an init object (Firefox bug 1330678).
* The `Selection.setBaseAndExtent()` method of the Selection API is now implemented (see Firefox bug 1321623).
* The "fakepath" addition to `file` type `<input>` `values` has been implemented in Gecko, giving it parity with other browsers (see Firefox bug 1274596).
* `Node.getRootNode()` has been implemented, replacing the deprecated `Node.rootNode` property (Firefox bug 1269155).
* Own properties of `Plugin` and `PluginArray` objects are no longer enumerable (Firefox bug 1270366).
* Named properties of `MimeTypeArray` objects are no longer enumerable (Firefox bug 1270364).
* The Permissions API now has a new permission name available — `persistent-storage` — as used when making a `Permissions.query()` (see Firefox bug 1270038). This allows an origin to use a persistent box (i.e., persistent storage) for its storage, as per the Storage API.
* The `Performance.timeOrigin` property has been implemented (Firefox bug 1313420).
### Workers and service workers

* The Network Information API is now available in workers (see Firefox bug 1323172).
* Server-sent events can now be used in workers (see Firefox bug 1267903).
* `ExtendableEvent.waitUntil()` can now be called asynchronously (see Firefox bug 1263304).
### WebGL

* The `WEBGL_compressed_texture_astc` WebGL extension has been implemented (Firefox bug 1250077).
* The `WEBGL_debug_renderer_info` WebGL extension is now enabled by default (Firefox bug 1336645).
### Audio, video, and media

#### General

* Beginning in **Firefox 53 for Android**, decoding of media is handled out-of-process for improved performance on multi-core systems (Firefox bug 1333323).

#### Media elements

* The `HTMLMediaElement.play()` method, used to begin playback of media in any media element, now returns a `Promise` which is fulfilled when playback begins and is rejected if an error occurs (Firefox bug 1244768).

#### Web Audio API

* The `AudioScheduledSourceNode` interface has been added and the `AudioBufferSourceNode`, `ConstantSourceNode`, and `OscillatorNode` interfaces are now based on it (Firefox bug 1324568).
* All the different audio node types have had constructors added to them (Firefox bug 1322883).

#### WebRTC

* The `RTCPeerConnection` methods `createOffer()` and `createAnswer()` now return a `Promise` that returns an object conforming to the `RTCSessionDescriptionInit` dictionary instead of returning an `RTCSessionDescription` directly. Existing code will continue to work, but new code can be written more simply.
* Similarly, the `RTCPeerConnection` methods `setLocalDescription()` and `setRemoteDescription()` now accept as input an object conforming to the dictionary `RTCSessionDescriptionInit` dictionary. Existing code continues to work, but can be simplified.
* `RTCPeerConnection.addIceCandidate()` now accepts as input an initialization object. This is compatible with existing code but allows new code to be written slightly more simply when used in tandem with the changes listed above (Firefox bug 1263312).
* DTMF support is now enabled by default using `RTCDTMFSender`. See Using DTMF with WebRTC for more information on how this works.
### HTTP/Networking

* Gecko now has a pref available in `about:config` to allow users to set their default `Referrer-Policy` — `network.http.referer.userControlPolicy` (Firefox bug 1304623). Possible values are:
    + 0 — `no-referrer`
    + 1 — `same-origin`
    + 2 — `strict-origin-when-cross-origin`
    + 3 — `no-referrer-when-downgrade` (the default)
* Support for Next Protocol Negotiation (NPN) has been removed in favor of Application-Layer Protocol Negotiation (ALPN) — see Firefox bug 1248198.
* The `Large-Allocation` HTTP header is now available by default, and no longer hidden behind a pref (Firefox bug 1331083).
### SVG

* Partly implemented `SVGGeometryElement` interface (Firefox bug 1239100).
Removals from the web platform
------------------------------

### HTML/XML

* The `dom.details_element.enabled` pref — which controlled enabling/disabling `<details>` and `<summary>` element support in Firefox — has now been removed from `about:config`. These elements (first enabled by default in Firefox 49) can no longer be disabled. See Firefox bug 1271549.
* The `mozapp` attribute of the `<iframe>` element /`HTMLIFrameElement` interface has been removed — this was used to enable a Firefox OS app to be embedded in a mozilla-prefixed Browser API `<iframe>` (Firefox bug 1310845).
* The `HTMLIFrameElement.setInputMethodActive()` method and `InputMethod` interface (used to set and manage IMEs on Firefox OS apps) has been removed (Firefox bug 1313169).
### CSS

* Removed `-moz` prefixed variant of `:dir()` pseudo-class (Firefox bug 1270406).
* The `-moz` prefixed version of `text-align-last` got removed (Firefox bug 1276808).
* Removed `-moz` prefixed variant of `calc()` method (Firefox bug 1331296).
* The proprietary `-moz-samplesize` media fragment (added to aid in delivery of downsampled images to low memory Firefox OS devices; see Firefox bug 854795) has been removed (Firefox bug 1311246).
### JavaScript

* The non-standard `ArrayBuffer.slice()` method has been removed (but the standardized version `ArrayBuffer.prototype.slice()` is kept, see Firefox bug 1313112).
### APIs

* The Wi-Fi information API, Speaker Manager API, and Tethering API, and Settings API] have been removed from the platform (see Firefox bug 1313788, Firefox bug 1317853, Firefox bug 1313789, and Firefox bug 1313155 respectively).
### Other

* The `legacycaller` has been removed from the `HTMLEmbedElement` and `HTMLObjectElement` interfaces (Firefox bug 909656).
Changes for add-on and Mozilla developers
-----------------------------------------

### WebExtensions

New APIs:

* `browsingData`
* `identity`
* `contextualIdentities`

Enhanced APIs:

* `storage.sync`
* `page_action`, `browser_action`, `password`, `tab` context types in `contextMenus`
* `webRequest.onBeforeRequest` now supports `requestBody`
* `tabs.insertCSS` now supports `cssOrigin`, enabling you to insert user style sheets.
### JavaScript code modules

* The asynchronous [AddonManager APIs]((/en-US/docs/Mozilla/Add-ons/Add-on\_Manager/AddonManager) now support `Promises` as well as callbacks (Firefox bug 987512.
Older versions
--------------

* 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 24 for developers
* Firefox 23 for developers
* Firefox 22 for developers


Firefox 8 for developers - Mozilla

Firefox 8 for developers
========================

Firefox 8 was released on November 8, 2011. This article provides information both for web developers and for add-on and Mozilla project developers to help take full advantage of the features of this release.

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

### HTML

* The `HTMLImageElement` `crossOrigin` property has been added and the `crossorigin` attribute has been added to the `<img>` element. (see Firefox bug 664299)
* The `HTMLSelectElement.add()` method now supports either an item or index of an item that the new item should be inserted before. Previously it only supported an item. (see Firefox bug 666200)
* The `HTMLIsIndexElement` constructor has been removed. No elements have implemented this interface since before Firefox 4.
* The HTML5 "context menu" feature (`contextmenu` attribute), which lets you add custom element specific items to native context menu, is now supported (the implementation is still experimental awaiting changes in the specification; see Firefox bug 617528).
* Support for the `HTMLElement.accessKeyLabel` attribute has been added to all elements.
* The `<input>` and `<textarea>` elements now support the `selectionDirection` attribute, and their `setSelectionRange()` methods have been updated to support optionally specifying a direction.
* Most elements now get a focus ring drawn around them if they've been made focusable by using the `tabindex` attribute and the user then focuses the element.
* In a set of nested `<label>` elements click events do no longer trigger multiple <label> elements, which caused Firefox to stop responding in the past (see Firefox bug 646157).
### DOM

* The `insertAdjacentHTML` method has been implemented.
* `BlobBuilder` now has a `getFile()` method that returns the content of the blob as a file.
* The `FileReaderSync` interface (part of the FileAPI) has been implemented.
* Event handling in nested `<label>`s has been fixed.
* You can now use `window.postMessage()` to pass `File` and `FileList` objects between windows.
* When editing `contenteditable` areas, exiting a heading by pressing return, or exiting list editing mode by pressing return twice, now returns to paragraph entry mode (that is, paragraphs inside `<p>` blocks) instead of separating lines by `<br>` elements.
* Fixed a bug that prevents justification from taking effect properly when applied to the first line in a `contenteditable` area.
* Fixed a bug that caused pressing delete or backspace at the beginning of a `contenteditable` area to affect the previous `contenteditable` block if one is present.
* `Document.getSelection()` now returns the same `Selection` object as `window.getSelection()`, instead of *stringifying* it.
* The HTML5 `selectionDirection` property makes it possible to define the direction of the selection in an editable text.
* `HTMLMediaElement` now have a `seekable` property that return a `TimeRanges` object.
* The `HTMLMediaElement``.preload` attribute now correctly reflects as an *enumerated value*.
* `crossOrigin` property defaults to "Anonymous" when an invalid value is used.
* `navigator.cookieEnabled` now returns correct information when the default cookie setting is overridden on a per-site basis.
### JavaScript

* `RegExp.exec()` and `RegExp.test()` called with no arguments now match against the string "undefined".
* `String.search()` and `String.match()` called with no arguments or `undefined` now match against the empty string and thus match every string.
* Support for watchlists has been implemented with the new (non-standard) `watch()` and `unwatch()` methods.
### CSS

* `<resolution>` now accepts `<number>`, not just `<integer>` values as per the specification.
* Hyphenation rules have been added for many new languages when using `hyphens`.
* Handling of `background-size` has been revised to more closely match the specification.
* In the past, `text-decoration` in quirks mode had line thickness and position adjusted on descendant text to match the descendant. Now standards mode and quirks mode rendering are more similar.
* Horizontal positioning for elements has been brought more in line with the specification in many cases. Documentation for this is forthcoming, but for now, see Firefox bug 682780, comment 23 for details.
* SVG images are now scaled properly when used as background images.
### Network

* Double quotes are no longer accepted as a delimiter for RFC 2231 or RFC 5987 encoding, as per those RFCs.
* MIME header field parser (`Content-Disposition`) now requires "=" in parameters.
* Scripts are no longer downloaded when JavaScript is disabled.
* SSL 2.0 is no longer supported.
### WebSockets

* The `WebSocket` object's `send()` method no longer incorrectly returns a Boolean value.
* The `WebSocket` object's `close()` method now matches the current draft of the standard, and close events now properly use the `CloseEvent` interface.
* The `WebSocket` object's `extensions` attribute is now supported.
* The WebSocket constructor now supports an array of protocols as well as a single protocol string.
* Mixed content is not allowed with WebSockets; that is, you can no longer open a connection to a non-secure WebSocket server from secure content.
* Connection errors with WebSockets now trigger the `onerror` handler.
* WebSocket API has been updated to the latest draft of the specification (see Firefox bug 674890, Firefox bug 674527, and Firefox bug 674716).
* The deflate-stream extension to WebSockets has been disabled; it has been deprecated, and was breaking compatibility with some sites.
### WebGL

* Cross-domain textures can now be allowed with CORS approval.
* Cross-process rendering with Direct2D/Direct3D 10.
### MathML

* Support for the `displaystyle` attribute on the top-level `<math>` element has been added.
* The interpretation of negative row numbers for the `align` attribute on `<mtable>` has been corrected.
### Developer tools

* The `console` object has a new `dir()` method, which displays an interactive list of the properties on a specified object.
Changes for Mozilla and add-on developers
-----------------------------------------

See Updating add-ons for Firefox 8 for a guide to changes you're likely to have to make your add-ons compatible with Firefox 8.

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

### XPCOM

`Components.utils`

The new methods `Components.utils.createObjectIn()` and `Components.utils.makeObjectPropsNormal()` have been created to make it easier to create objects in specific compartments.

#### Other XPCOM-related changes

* You can now instantiate DOM `File` objects from component code by doing new File, instead of having to instantiate an `nsIDOMFile` directly.
* The `nsTPtrArray` array type has been removed. Its functionality is now all available on `nsTArray`, which now offers the `SafeElementAt()` method when instantiated using a pointer type.
### Workers

It is no longer possible to access XPCOM objects from ChromeWorkers. XPConnect has been disabled in worker contexts as of Firefox bug 649537.

### XUL

* A bug in `document.execCommand()` that occurred when calling it on the value of `contentDocument` has been fixed. Since Firefox 3, this has resulted in errors instead of working correctly.
* Bootstrapped add-ons can now load chrome using a `chrome.manifest` file.
* XUL images now shrink down with the same ratio in both directions when specifying maximum sizes.
### Changes to the build system

* The following build configuration options have been removed:
    + `--enable-timeline`
    + `--disable-storage`
    + `--necko-disk-cache`
* When compiling IDL files to headers, the header file `jspubtd.h` is automatically included when needed. Manual inclusions of `jspubtd.h` and/or `jsapi.h` in IDL files that use jsval or [implicit\_jscontext] are no longer necessary.
### Chrome registration

* The `platformversion` flag can be used in the chrome.manifest to specify Gecko version compatibility.
### Interface changes

* The `mozIJSSubScriptLoader.loadSubScript()` method now loads scripts from the startup cache when possible.
* The `ownerWindow` attribute has been removed from the `nsIAccessNode` interface.
* The `nsIDOMStorageWindow` interface has been merged into the `nsIDOMWindow` interface.
* All members of the `nsIDOMWindowInternal` interface have been moved into the `nsIDOMWindow` interface. The interface itself (with no members) remains available for compatibility until Firefox 9.
* In order to improve performance, callback handling for asynchronous Places database updates has been changed. See the new `mozIVisitInfoCallback.handleResult()` and `mozIVisitInfoCallback.handleError()` methods, which replace the old single method for both error and success condition handling.
* The `KIND_MAPPED` attribute of `nsIMemoryReporter` has been deprecated in favor of `KIND_NONHEAP`, new unit types `UNITS_COUNT_CUMULATIVE` and `UNITS_PERCENTAGE` have been added.
* The `nsIMemoryReporterManager` interface has a new `explicit` attribute, which reports the total size of explicit memory allocations.
* The `nsIMemoryReporterManager` interface has a new `resident` attribute, which reports the amount of physical memory used.
* The `nsINetworkLinkService` interface has a new attribute, `linkType`. This attribute provides the type of network connection in use. All Operating Systems currently return `LINK_TYPE_UNKNOWN`. Android support was backed out due to perceived security concerns.
* The `nsISelection2` interface has been merged into the `nsISelectionPrivate` interface.
* The `nsISelection3` interface has been merged into the `nsISelection` interface.
* The `nsISessionStartup` attribute state is now a `jsval` instead of a string, for performance reasons.
* The `nsIDocShell` attribute `isActive` is now `false` for minimized windows.
* The `nsIDownloadHistory.addDownload()` method now saves the target where the download is saved on the local file system.

#### Removed interfaces

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

* `nsITimelineService`
* `nsIDOMHTMLIsIndexElement`

The `nsIWorkerFactory` interface has been removed as well. Workers can still be created using the `Worker` and `ChromeWorker` constructors.

### Other changes

* When a window is minimized, un-minimized, or switches between full screen and windowed mode, it receives a `sizemodechange` event.
* You can now use the `extensions.autoDisableScopes` preference to disable automatic installation of add-ons from specific add-on install locations.
* The new `mozSyntheticDocument` property on `Document` objects lets you determine whether a document is synthetic (that is, something like a standalone image, video, or audio file) rather than a full, standard DOM document. This can be useful, for example, if you want to present different user interface in this situation (such as adding contextual items differently depending on this case).
* You can now specify a filter when opening `about:config`; for example, "about:config?filter=sessionstore" will show only session storage related preferences.
See also
--------

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

Firefox 119 for developers
==========================

This article provides information about the changes in Firefox 119 that affect developers. Firefox 119 was released on October 24, 2023.

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

### HTML

#### Removals

* The `<input>` element no longer supports the non-standard `mozactionhint` attribute. Use `enterkeyhint` instead. (See Firefox bug 1735980 for more details.)
### CSS

* The `attr()` CSS function fallback value is now supported. This allows the setting of a fallback value to be used if the global attribute is missing (Firefox bug 1448248).
### JavaScript

* The `Object.groupBy()` and `Map.groupBy()` static methods for grouping the elements of an iterable are now supported (See Firefox bug 1792650 for more details.)
* The `String.prototype.isWellFormed()` and `String.prototype.toWellFormed()` methods respectively can be used to check if a string contains well-formed Unicode text (i.e. contains no lone surrogates) and sanitize an ill-formed string to well-formed Unicode text.
 (See Firefox bug 1850755 for more details).
### SVG

* The SVG attributes that accept a `<length>` value now support level 3 `<length>` CSS data types for all SVG elements. This enables the sizing of SVG elements based on font sizes (`cap`, `rem`, etc.), viewport (`vh`, `vw`, `vmin`, etc.), or absolute lengths (`px`, `cm`, etc.), e.g. `<line x1="10vw" y1="10vh" x2="50vw" y2="50vh"/>`. (See Firefox bug 1287054 for more details).
### HTTP

* The `credentialless` directive of the `Cross-Origin-Embedder-Policy` HTTP response header is now supported on desktop platforms (and mobile platforms other than Android), allowing `no-cors` requests for resources to be made on cross-origin servers that have not explicitly opted into it, albeit without cookies or other credentials (Firefox bug 1851467).
### APIs

* The relative priority for send streams can now be specified by including the `sendOrder` property inside an options argument passed to `WebTransport.createBidirectionalStream()` and `WebTransport.createUnidirectionalStream()` (Firefox bug 1816925).
* The `getAuthenticatorData()`, `getPublicKeyAlgorithm()`, and `getPublicKey()` methods of the `AuthenticatorAttestationResponse` interface are now supported (see Firefox bug 1816519 and Firefox bug 1816520).
* The Credential Properties Extension (`credProps`) of the Web Authentication API is supported, allowing users to query if credentials are discoverable after creation/registration (Firefox bug 1844437).
* The `SubtleCrypto.deriveKey()` method now supports the HKDF algorithm as an option for its `derivedKeyAlgorithm` parameter (see Firefox bug 1851928).
* The `parseCreationOptionsFromJSON()`, `parseRequestOptionsFromJSON()`, and `toJSON()` methods of the `PublicKeyCredential` interface are now supported.
 These are convenience methods for converting objects used for creating and sharing credentials objects to JSON representations that can be serialized/deserialized and shared with a server (see Firefox bug 1823782).

#### DOM

* ARIA reflection is now supported by default for attributes that do not reference other elements; only non-IDREF attributes are reflected. You can now get and set ARIA attributes on DOM elements directly via JavaScript APIs, rather than by using `setAttribute` and `getAttribute`. For example, `buttonElement.ariaPressed = "true";` is now supported in addition to `buttonElement.setAttribute("aria-pressed", "true");` (Firefox bug 1785412).
### WebDriver conformance (WebDriver BiDi, Marionette)

#### General

* When performing a `pointerDown` action with the middle or right mouse button pressed, the `mousedown` event as emitted by the related HTML element had the value of the `buttons` property swapped (Firefox bug 1850086).
* When performing a `scroll` action of input type `wheel` with an origin set to `pointer` an `invalid argument` error was inappropriately raised, whereas per the current WebDriver specification this combination is not supported (Firefox bug 1850166).

#### WebDriver BiDi

* Added the `browsingContext.reload` command that allows users to reload the page or a frame that is currently displayed within a given browsing context (Firefox bug 1830859).
* Added the `browsingContext.userPromptClosed` event that is emitted when a user prompt of type `alert`, `confirm`, or `prompt` got closed (Firefox bug 1824221).
* Added the `browsingContext.navigationStarted` event that is emitted when a new navigation is started by Firefox (Firefox bug 1756595).
* Added the `script.realmCreated` and `script.realmDestroyed` events that allow users to monitor the lifetime of JavaScript Realms of a given browsing context. Such a Realm is basically an isolated execution environment (`sandbox`) with its own unique global object (window) (Firefox bug 1788657, Firefox bug 1788659).
* The `browsingContext.userPromptOpened` event was accidentally sent when a HTTP Authentication dialog was opened (Firefox bug 1853302).
* Unwanted events with the `context` field set to `null` will no longer be emitted. Because the underlying browsing context has been closed such events are no longer valid (Firefox bug 1847563).

#### Marionette

* The list of possible error codes when trying to install a WebExtension by using the `Addon:Install` command has been updated to match the latest error codes of Firefox (Firefox bug 1852537).
Older versions
--------------

* 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 89 for developers
* Firefox 88 for developers


Firefox 62 for developers - Mozilla

Firefox 62 for developers
=========================

This article provides information about the changes in Firefox 62 that will affect developers. Firefox 62 was released on September 5, 2018.

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

### Developer tools

* The Shape Path Editor is now available by default — see Edit Shape Paths in CSS for more information.
* You can now split the Rules view out into its own pane, separate from the other tabs on the CSS pane. See Page inspector 3-pane mode for more details.
* The Grid inspector has updated features, and all new documentation — see CSS Grid Inspector: Examine grid layouts.
* You now have four options for the location of the Developer Tools. In addition to the default location on the bottom of the window, you can choose to locate the tools on either the left or right sides of the main window or in a separate window (Firefox bug 1192642).
* A close button has been added to the split console toolbar.
* If the option to "Select an iframe as the currently targeted document" is checked, the icon will appear in the toolbar while the Settings tab is displayed, even if the current page doesn't include any iframes (Firefox bug 1456069).
* The Network Monitor's Cookies tab now shows the cookie `samesite` attribute (Firefox bug 1452715).
* Responsive design mode now works inside container tabs (Firefox bug 1306975).
* When CORS errors occur and are reported on the console, Firefox now provides a link to the corresponding page in our CORS error documentation (Firefox bug 1475391).
* Create a screenshot of the current page (with an optional filename) from the Console tab (Firefox bug 1464461) using the following command:

```bash
:screenshot <filename.png> --fullpage
```

where `<filename.png>` is the desired filename. The file will be saved to your downloads folder. The `--fullpage` parameter is optional, but if included, it will save the full web page. This option also adds `-fullpage` to the name of the file. For a list of all options available for this command, enter: `:screenshot --help`

#### Removals

* The *Developer Toolbar/GCLI* (accessed with `Shift` + `F2`), **has been removed** from Firefox (Firefox bug 1461970). Both the Developer Toolbar UI and the GCLI upstream library have become unmaintained, some of its features are broken (some ever since e10s), it is blocking the `unsafeSetInnerHTML` work, usage numbers are very low, alternatives exist for the most used commands.
### HTML

*No changes.*

### CSS

* `:-moz-selection` has been unprefixed to `::selection` (Firefox bug 509958).
* `x` is now supported as a unit for the `<resolution>` type (Firefox bug 1460655).
* `shape-margin`, `shape-outside`, and `shape-image-threshold` are now enabled by default (Firefox bug 1457297).

#### Removals

* All XUL `display` values with the exception of `-moz-box` and `-moz-inline-box` have been removed from non-XUL documents in Firefox bug 1288572.
### SVG

*No changes.*

### JavaScript

* The `WebAssembly.Global()` constructor is now supported, along with global variables in WebAssembly (Firefox bug 1464656).
* The `Array.prototype.flat()` and `Array.prototype.flatMap()` methods are now enabled by default (Firefox bug 1435813).
* The `import.meta` property has been implemented to expose context-specific metadata to a JavaScript module (Firefox bug 1427610).
* JavaScript string literals may now directly contain the U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR characters. As a consequence, `JSON` syntax is now a subset of JavaScript literal syntax (see Firefox bug 1435828 and the TC39 proposal json-superset).
* For out-of-bounds typed array indexes, `Reflect.defineProperty()` and `Reflect.set()` will now return `false` instead of `true` (Firefox bug 1308735).

#### Removals

* The `DOMPoint` and `DOMPointReadOnly` constructors no longer support an input parameter of type `DOMPointInit`; the values of the properties must be specified using the `x`, `y`, `z`, and `w` parameters (Firefox bug 1186265).
* The `URL.createObjectURL()` method no longer supports creating object URLs to represent a `MediaStream`. This capability has been obsolete for some time, since you can now set `HTMLMediaElement.srcObject` to the `MediaStream` directly (Firefox bug 1454889).
### APIs

#### New APIs

* The Speech Synthesis API (Text-to-Speech) is now enabled by default on Firefox for Android (Firefox bug 1463496).

#### DOM

* The `DOMPointReadOnly` interface now supports the static function `DOMPointReadOnly.fromPoint()`, which creates a new point object from a dictionary that's compatible with `DOMPointInit`, which includes any `DOMPoint` object. This function is also available on `DOMPoint` (Firefox bug 1186265).
* For compatibility purposes, the `Event.srcElement` property is now supported. It is an alias for `Event.target` (Firefox bug 453968).
* `Navigator.registerProtocolHandler()` now must only be called from a secure context (Firefox bug 1460506).
* The `Navigator.registerContentHandler()` method has been disabled by default in preparation for being removed entirely, as it's been obsolete for some time (Firefox bug 1460481).
* The `DataTransfer()` constructor has been implemented (Firefox bug 1351193).
* `Document.domain` can no longer return `null` (Firefox bug 819475). If the domain cannot be identified, then `domain` returns an empty string instead of `null`.
* Added the `console.timeLog()` method to display the current value of a console timer while continuing to track the time (Firefox bug 1458466).
* Added `console.countReset()` to reset a console counter value (Firefox bug 1459279).

#### DOM events

*No changes.*

#### Service workers

*No changes.*

#### Media, Web Audio, and WebRTC

* The `"media.autoplay.enabled"` preference now controls automatic playback of both audio and video media, instead of just video media (Firefox bug 1413098).
* The `ChannelSplitterNode` has been fixed to correctly default to having 6 channels with the `channelInterpretation` set to `"discrete"` and the `channelCountMode` set to `"explicit"`, as per the specification (Firefox bug 1456265).

#### Removals

* The `userproximity` and `deviceproximity` events, as well as the `UserProximityEvent` and `DeviceProximityEvent` interfaces, have been disabled by default behind the `device.sensors.proximity.enabled` preference (Firefox bug 1462308).
* The `devicelight` event of type `DeviceLightEvent` has been disabled by default behind the `device.sensors.ambientLight.enabled` preference (Firefox bug 1462308).
* The `DOMSubtreeModified` and `DOMAttrModified` mutation events are no longer thrown when the `style` attribute is changed via the CSSOM (Firefox bug 1460295.
* Support for `CSSStyleDeclaration.getPropertyCSSValue()` has been removed (Firefox bug 1408301).
* Support for `CSSValue`, `CSSPrimitiveValue`, and `CSSValueList` has been removed (Firefox bug 1459871).
* `window.getComputedStyle()` no longer returns `null` when called on a `Window` which has no presentation (Firefox bug 1467722).
### HTTP

#### Removals

* The deprecated CSP `referrer` directive has been removed. Please use the `Referrer-Policy` header instead (Firefox bug 1302449).
### Security

*No changes.*

### Plugins

*No changes.*

### WebDriver conformance (Marionette)

#### New features

* Command `WebDriver:ElementSendKeys` has been made WebDriver conforming for file uploads (Firefox bug 1448792).
* User prompts as raised by `beforeunload` events are automatically dismissed for `WebDriver:Get`, `WebDriver:Back`, `WebDriver:Forward`, `WebDriver:Refresh`, and `WebDriver:Close` commands (Firefox bug 1434872).
* `WebDriver:PerformActions` for `Ctrl` + `Click` synthesizes a `contextmenu` event (Firefox bug 1421323).

#### API changes

* Removed obsolete endpoints including `getWindowPosition`, `setWindowPosition`, `getWindowSize`, and `setWindowSize` (Firefox bug 1348145).
* WebDriver commands which return success with data `null` now return an empty dictionary (Firefox bug 1461463).

#### Bug fixes

* `WebDriver:ExecuteScript` caused cyclic reference error for WebElement collections (Firefox bug 1447977).
* Dispatching a `pointerMove` or `pause` action primitive could cause a hang, and the command to never send a reply (Firefox bug 1467743, Firefox bug 1447449).
### Other

*No changes.*

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

### API changes

* Added the `webRequest.getSecurityInfo()` API to examine details of TLS connections (Firefox bug 1322748).
* Added the `browserSettings.newTabPosition` to customize where new tabs open (Firefox bug 1344749).
* `windowTypes` has been deprecated in `windows.get()`, `windows.getCurrent()`, and `windows.getLastFocused()` (Firefox bug 1419132).
* It's now possible to modify a browser action on a per-window basis (Firefox bug 1419893).
### Manifest changes

* New `open_at_install` property of the `sidebar_action` manifest key enables extensions to control whether their sidebars should open automatically on install or not (Firefox bug 1460910).
* Changes to the `browser_style` property of various manifest keys:
    + In `page_action` and `browser_action` it defaults to `false`.
    + In `sidebar_action` and `options_ui` it defaults to `true`.
### Theme changes

* New `tab_background_separator` property of the `theme` manifest key enables extensions to change the color of the tab separator (Firefox bug 1459455).
### Removals

* Support for unpacked sideloaded extensions has been removed (Firefox bug 1385057).
* The warning about `browser_style` displayed when temporarily loading an extension for testing is no longer displayed (Firefox bug 1404724).
Older versions
--------------

* 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 35 for developers
* Firefox 34 for developers
* Firefox 33 for developers
* Firefox 32 for developers
* Firefox 31 for developers


Firefox 29 for developers - Mozilla

Firefox 29 for developers
=========================

Firefox 29 was released on April 29, 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

Major changes include:

* Vastly improved web console - Arrays are shown inline without clicking to bring up in the right inspector, window objects show their URL, etc.
* Added the console API to Web Workers (bug 620935). Now you can log messages to the Web Console from Web Workers.
* The Network Monitor tool now shows performance statistics using pie charts (Firefox bug 846601).
* On the Inspector, preview tooltips of CSS transforms are now available (Firefox bug 726427).
* DOM elements seen in the debugger and console can be removed or inspected directly, via the new buttons to the right of the variable listing.
* A CSS source map is now supported by the Style Editor (Firefox bug 926014).
* Autocompletion of CSS properties and values has been added to the Style Editor (Firefox bug 717369).

*See the Mozilla Hacks blog post for details and other smaller changes.*

### CSS

* CSS variables have been implemented (Firefox bug 773296). Mozilla Hacks article can be found here. They are enabled by default only for non-release builds (on release builds flip the pref `layout.css.variables.enabled` to `true` if you want to play with them).
* Flexboxes now support `visibility``: collapse` (Firefox bug 783470).
* The `box-sizing` property has been unprefixed (Firefox bug 243412).
* The `will-change` property, a hint to that something will animate has been added. The preference `layout.css.will-change.enabled` must be switched to `true` to enable it. (Firefox bug 940842)
* Scientific exponential notation, like `3e1` or `10e+0`, is now supported for `<number>` values and derivatives, like `<percentage>` and unit values, but not `<integer>` (Firefox bug 964529).
* Images of type `<gradient>` are now supported in `border-image` (Firefox bug 709587).
* The `touch-action` property has been implemented. It is not activated by default; the `layout.css.touch_action.enabled` pref controls it. (Firefox bug 795567)
* Remove redundant default style for <pre> element from quirk.css (Firefox bug 948914).
* CSS Variables fallback incorrectly implemented (primary cycles) (Firefox bug 950497).
* @supports conditions with tokens after a declaration's priority should evaluate to false (Firefox bug 909170).
### HTML

* `<input type=color>` and `<input type=number>` are available by default.
* Support for the non standard `<pre cols>` has been removed, as well as the layout effect of `<pre wrap>`. Both effects can, and should, be achieved using CSS. (Firefox bug 949879)
### JavaScript

* New ECMAScript 2015 String methods: `String.prototype.codePointAt()` and `String.prototype.fromCodePoint()` have been implemented (Firefox bug 918879).
* The ECMAScript Internationalization API (ECMA-402) has been implemented and is now enabled by default in Firefox Desktop (Firefox bug 853301):
    + New objects in the new `Intl` object namespace:
        - `Intl.Collator`
        - `Intl.DateTimeFormat`
        - `Intl.NumberFormat`
    + The following methods of `String`, `Number` and `Date` have been updated to include the `locales` and `options` arguments per ECMA-402:
        - `String.prototype.localeCompare()`
        - `Number.prototype.toLocaleString()`
        - `Date.prototype.toLocaleString()`
        - `Date.prototype.toLocaleDateString()`
        - `Date.prototype.toLocaleTimeString()`
* To match the updated ECMAScript 2015 draft specification, the `Map` and `Set` objects now treat `-0` and `+0` as the same when checking for key and value equality.
* `Promise` has been enabled by default (Firefox bug 918806).
* Completed generators now return an `IteratorResult` object instead of throwing (Firefox bug 958951).
* A malformed JSON string parsed by `JSON.parse()` now yields a more detailed error message containing the line and column number that caused the parsing error. This is useful when debugging large JSON data.
* The `ArrayBuffer.isView()` method has been added (Firefox bug 896105).
### Interfaces/APIs/DOM

* A new type of workers, `SharedWorker`, is now available by default (Firefox bug 924089).
* The `URL` interface now supports the `searchParams` property returning a `URLSearchParams` object, allowing to modify the search params of a URL (Firefox bug 887836). The `URLSearchParams()` constructor allows easier parsing of query strings.
* The `navigator.onLine` property is now supported on `WorkerNavigator`, allowing to know the online/offline status in workers (Firefox bug 925437).
* As part of the implementation of Web Components, the `HTMLShadowElement` interface has been implemented behind the `dom.webcomponents.enabled`. Flip it to `true` if you want to use it. (Firefox bug 887538)
* The read-only property `HTMLIFrameElement.sandbox` is no longer a string but a `DOMTokenList` (Firefox bug 845057).
* On `HTMLCanvasElement.getContext()`, the value `moz-webgl` is no longer supported. Use the standard `webgl` value (Firefox bug 913597).
* The constructor for `ImageData` has been added. This interface can be used in a `Worker`. (Firefox bug 959958)
* The property `location.origin` is now available in workers (via `WorkerLocation`) (Firefox bug 964148).
* The `ValidityState.badInput` property has been implemented (Firefox bug 827161).
* The deprecated `Window.pkcs11` property has been removed; it was returning `null` since Firefox 3.0.14. (Firefox bug 964964)
* The `Node.cloneNode()` and `Document.importNode()` methods take the Boolean `deep` argument. Until now, if omitted, these methods acted as if the value of `deep` was `true`. But this behavior has been changed as per the latest spec, and if omitted, the methods will act as if the value was `false`. (Firefox bug 937461)
* `Window._content` is no longer available to Web content (Firefox bug 946564).
* `URLUtils.port` behavior has been slightly changed: set to `''` will set it to the default port associated with the protocol, and `0` to `0.` (Firefox bug 930450)
* `Document.referrer` is now based on the incumbent script (Firefox bug 887928).
* The Gamepad API is enabled by default (Firefox bug 878828).
* The `CanvasRenderingContext2D.drawSystemFocusRing()` method got renamed to `CanvasRenderingContext2D.drawFocusIfNeeded()` (Firefox bug 959820).
### MathML

*No change.*

### SVG

*No change.*

Security
--------

* The CSP 1.1 experimental `hash-source` directive has been implemented. The preference `security.csp.experimentalEnabled` should be set to `true` to enable this functionality (Firefox bug 883975).
Changes for add-on and Mozilla developers
-----------------------------------------

* Major Firefox theme changes affect most extensions that interact with the Firefox user interface.
* `nsISecurityCheckedComponent` has been removed (Firefox bug 794943). Most consumers can remove `nsISecurityCheckedComponent` from their interface definition and they will continue to work.
### Older versions

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

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

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

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

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

### Developer Tools

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

*No changes.*

### CSS

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

#### Removals

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

*No changes.*

### HTTP

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

*No changes.*

### APIs

#### DOM

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

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

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

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


Firefox 25 for developers - Mozilla

Firefox 25 for developers
=========================

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

### New in Firefox DevTools

* The inspector now features autocompletion for CSS names and values.
* The debugger now lets you "black box" script files, to prevent breakpoints from stopping in library code you're not interested in debugging.
* The Profiler now has the ability to save and import profiling results. "Show Gecko Platform Data" is now an option in the Firefox developer tools options.
* The Network panel has a right-click context menu, with copy and resend URL commands.
* Numerous under-the-hood changes may make some rewriting necessary for addons that modify the DevTools.
### CSS

* The support for the keyword `local` as a value of the `background-attachment` CSS property has been added (Firefox bug 483446).
* Support of a non-standard Mozilla-only media query to determine the operating system version has been added: `-moz-os-version` (Firefox bug 810399). The property is currently only implemented on Windows.
* The `-moz-osx-font-smoothing` CSS property has been added (Firefox bug 857142).
* Our experimental support for `filter` now supports the `hue-rotate()` functional notation (Firefox bug 897392). It is still preffed off by default.
* `page-break-inside`: `avoid` is now working with the height of a block (Firefox bug 883676).
### HTML

* The `srcdoc` attribute of `<iframe>`, allowing the inline specification of the content of an `<iframe>`, is now supported (Firefox bug 802895).
* When used with a `"image/jpeg"` type, the method `HTMLCanvasElement.toBlob` now accepts a third attribute defining the quality of the image (Firefox bug 891884).
### JavaScript

ECMAScript 2015 implementation continues!

* The method `Array.of()` is now implemented on `Array` (Firefox bug 866849).
* Support for the methods `Array.prototype.find()` and `Array.prototype.findIndex()` has been added (Firefox bug 885553).
* The methods `Number.parseInt()` and `Number.parseFloat()` have been implemented (Firefox bug 886949)
* The methods `Map.prototype.forEach()` and `Set.prototype.forEach()` are now implemented (Firefox bug 866847).
* New mathematical methods have been implemented on `Math`: `Math.log10()`, `Math.log2()`, `Math.log1p()`, `Math.expm1()`, `Math.cosh()`, `Math.sinh()`, `Math.tanh()`, `Math.acosh()`, `Math.asinh()`, `Math.atanh()`, `Math.trunc()`, `Math.sign()` and `Math.cbrt()` (Firefox bug 717379).
* Support for binary and octal integer literals has been added: `0b10101010`, `0B1010`, `0o777`, `0O237` are now valid (Firefox bug 894026).
* The machine epsilon constant, that is the smallest representable number that added to 1 will not be 1, is now available as `Number.EPSILON` (Firefox bug 885798).
* Typed arrays have been updated to no longer search in the prototype chain for indexed properties (Firefox bug 829896).
### Interfaces/APIs/DOM

* The Web Audio API is now supported. An incomplete implementation was previously available behind a preference (Firefox bug 779297).
* Some IME related keys on Windows are supported by `KeyboardEvent.key` (Firefox bug 865565), see the key name table for the detail.
* Firefox for Metro now dispatches key events in the same way as the desktop version (Firefox bug 843236).
* `keypress` event is no longer dispatched if `preventDefault()` of preceding `keydown` event is called (Firefox bug 501496), see the document of `keydown` event for the detail.
* Renamed the `Future` interface to `Promise` (Firefox bug 884279).
* The `srcDoc` property on the `HTMLIFrameElement` interface, allowing the inline specification of the content of an `<iframe>`, is now supported (Firefox bug 802895).
* The `createTBody()` method on the `HTMLTableElement` interface, allowing to get its `<tbody>`, is now supported (Firefox bug 813034).
* The `Range.collapse()` method `toStart` parameter is now optional and default to `false`, as defined in the spec (Firefox bug 891340).
* Support of the `ParentNode` mixin on `Document` and `DocumentFragment` has been added (Firefox bug 895974).
* The `previousElementSibling` and `nextElementSibling` have been moved to the `ChildNode` mixin allowing them to be called not only on a `Element` object but also on a `CharacterData` or `DocumentType` object (Firefox bug 895974).
* The `navigator.geolocation` property has been updated to match the spec. It never returns `null`. When the preference `geo.enabled` is set to `false`, it now returns `undefined` (Firefox bug 884921).
* The `videoPlaybackQuality` attribute on the `HTMLVideoElement` interface has been changed to the `getVideoPlaybackQuality` method. (Firefox bug 889205)
* The non-standard `GlobalObjectConstructor` interface has been removed (Firefox bug 898136). This interface was used to add arguments to the constructors of APIs that Firefox add-ons were exposing on the global object. This capability has been removed; note that at this time there's no replacement for this functionality.
### MathML

*No change.*

### SVG

*No change.*

### Older versions

* 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