Firefox 60 for developers - Mozilla

Firefox 60 for developers
=========================

This article provides information about the changes in Firefox 60 that will affect developers. Firefox 60 was released on May 9, 2018.

Stylo comes to Firefox for Android in 60
----------------------------------------

Firefox's new parallel CSS engine — also known as **Quantum CSS** or **Stylo** — which was first enabled by default in Firefox 57 for desktop, has now been enabled in Firefox for Android.

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

### Developer tools

* In the CSS Pane rules view (see Examine and edit CSS), the keyboard shortcuts for precise value increments (increase/decrease by 0.1) have changed from `Alt` + `Up`/`Down` to `Ctrl` + `Up`/`Down` on Linux and Windows, to avoid clashes with default OS-level shortcuts (see Firefox bug 1413314).
* Also in the CSS Pane rules view, CSS variable names will now auto-complete (Firefox bug 1422635). If you enter `var(` into a property value and then type a dash (`-`), any variables you have declared in your CSS will then appear in an autocomplete list.
* In Responsive Design Mode, a *Reload when…* dropdown has been added to allow users to enable/disable automatic page reloads when touch simulation is toggled, or simulated user agent is changed. See Controlling page reload behavior for more details (Firefox bug 1428816).
* The `view_source.tab` preference has been removed so you can no longer toggle View Source mode between appearing in a new tab or new window. Page sources will always appear in new tabs from now on (Firefox bug 1418403).
### HTML

Pressing the Enter key in `designMode` and `contenteditable` now inserts `<div>` elements when the caret is in an inline element or text node which is a child of a block level editing host — instead of inserting `<br>` elements like it used to. If you want to use the old behavior on your app, you can do it with `document.execCommand()`. See Differences in markup generation for more details (also see Firefox bug 1430551).

### CSS

* The `align-content`, `align-items`, `align-self`, `justify-content`, and `place-content` property values have been updated as per the latest CSS Box Alignment Module Level 3 spec (Firefox bug 1430817).
* The `paint-order` property has been implemented (Firefox bug 1426146).
### SVG

*No changes.*

### JavaScript

* ECMAScript 2015 modules have been enabled by default in (Firefox bug 1438139). See ES6 In Depth: Modules and ES modules: A cartoon deep dive for more information, or consult MDN reference docs:
    + `<script src="main.js" type="module">` and `<script nomodule src="fallback.js">`
    + `import` and `export` statements.
* The `Array.prototype.values()` method has been added again (Firefox bug 1420101). Make sure your code doesn't have any custom implementation of this method.
### APIs

#### New APIs

* The Web Authentication API has been enabled in (Firefox bug 1432542).

#### DOM

* In the Web Authentication API, the `MakePublicKeyCredentialOptions` dictionary object has been renamed `PublicKeyCredentialCreationOptions`; this change has been made in Firefox (Firefox bug 1436473).
* The `dom.workers.enabled` pref has been removed, meaning workers can no longer be disabled since (Firefox bug 1434934).
* The `body` property is now implemented on the `Document` interface, rather than the `HTMLDocument` interface (Firefox bug 1276438).
* `PerformanceResourceTiming` is now available in workers (Firefox bug 1425458).
* The `PerformanceObserver.takeRecords()` method has been implemented (Firefox bug 1436692).
* The `KeyboardEvent.keyCode` attribute of punctuation key becomes non-zero even if the active keyboard layout doesn't produce ASCII characters. See these notes for more detail. Please do **not** use `KeyboardEvent.keyCode` in new applications — use `KeyboardEvent.key` or `KeyboardEvent.code` instead.
* The `Animation.updatePlaybackRate()` method has been implemented (Firefox bug 1436659).
* New rules have been included for determining keyCode values of punctuation keys (Firefox bug 1036008).
* The Gecko-only options object `storage` option of the `IDBFactory.open()` method (see Experimental Gecko options object) has been deprecated (Firefox bug 1442560).
* Promises can now be used within IndexedDB code (Firefox bug 1193394).

#### DOM events

*No changes.*

#### Service workers

*No changes.*

#### Media and WebRTC

* When recording or sharing media obtained using `getUserMedia()`, muting the camera by setting the corresponding track's `MediaStreamTrack.enabled` property to `false` now turns off the camera's "in use" indicator light, to help the user more easily see that the camera is not in use (Firefox bug 1299515). See User privacy for more details. See also this blog post.
* Removing a track from an `RTCPeerConnection` using `removeTrack()` no longer removes the track's `RTCRtpSender` from the peer connection's list of senders as reported by `getSenders()` (Firefox bug 1290949).
* The `RTCRtpContributingSource` and `RTCRtpSynchronizationSource` objects' timestamps were previously being reported based on values returned by `Date.getTime()`. In Firefox 60, these have been fixed to correctly use the Performance Timing API instead (Firefox bug 1433576).
* As per spec, the `ConvolverNode()` constructor now throws a `NotSupportedError` `DOMException` if the referenced `AudioBuffer` does not have 1, 2, or 4 channels (Firefox bug 1443228).
* The obsolete `RTCPeerConnection` event handler `RTCPeerConnection.onremovestream` has been removed; by now you should be using `removetrack` events instead (Firefox bug 1442385).
* The primary name for `RTCDataChannel` is now in fact `RTCDataChannel`, instead of being an alias for `DataChannel`. The name `DataChannel` is no longer supported (Firefox bug 1173851).

#### Canvas and WebGL

* If the `privacy.resistFingerprinting` preference is set to `true`, the `WEBGL_debug_renderer_info` WebGL extension will be disabled from now on (Firefox bug 1337157).
### CSSOM

*No changes.*

### HTTP

* `SameSite` cookies are now supported (Firefox bug 795346). See `Set-Cookie` for more information.
### Security

The `X-Content-Type-Options` header, when set to `no-sniff`, now follows the specification for JavaScript MIME types. In particular, `text/json` and `application/json` are no longer valid values (Firefox bug 1431095).

### Plugins

*No changes.*

### Other

Fetches that include credentials can now share connections with fetches that don't include credentials. For example, if the same origin requests some web fonts as well as some credentialed user data from the same CDN, both could share a connection, potentially leading to a quicker turnaround (Firefox bug 1363284).

Removals from the web platform
------------------------------

### HTML

*No changes.*

### CSS

* The proprietary `-moz-user-input` property's `enabled` and `disabled` values are no longer available (Firefox bug 1405087).
* The proprietary `-moz-border-top-colors`, `-moz-border-right-colors`, `-moz-border-bottom-colors`, and `-moz-border-left-colors` properties have been removed from the platform completely (Firefox bug 1429723).
### JavaScript

The non-standard expression closure syntax has been removed (Firefox bug 1426519).

### APIs

*No changes.*

### SVG

*No changes.*

### Other

*No changes.*

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

### WebExtensions

Theme API:

* headerURL is now optional
* When creating a browser theme, any `text-shadow` applied to the header text is removed if no `headerURL` is specified (see Firefox bug 1404688).
* New properties are supported:
    + **tab\_line**
    + **tab\_selected**
    + **popup**
    + **popup\_border**
    + **popup\_text**
    + **tab\_loading**
    + **icons**
    + **icons\_attention**
    + **frame\_inactive**
    + **button\_background\_active**
    + **button\_background\_hover**
Older versions
--------------

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


Firefox 89 for developers - Mozilla

Firefox 89 for developers
=========================

This article provides information about the changes in Firefox 89 that will affect developers. Firefox 89 was released on June 1, 2021.

**Note:** See also Looking fine with Firefox 89 on Mozilla Hacks.

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

### Developer Tools

*No changes.*

### HTML

*No changes.*

### CSS

* The `forced-colors` media feature has been implemented (Firefox bug 1659511).
* The `ascent-override`, `descent-override`, and `line-gap-override` `@font-face` descriptors have been implemented (Firefox bug 1681691 and Firefox bug 1704494).
* The `type()` function for `image/image-set()` has been implemented (Firefox bug 1695404).
* The `aspect-ratio` CSS property is now supported (Firefox bug 1672073).
### JavaScript

* Top-level `await` is now enabled by default (Firefox bug 1681046).
* ArrayBuffers can now be created with a length greater than 2GB-1 (up to 8GB) on 64-bit systems (Firefox bug 1703505).
### HTTP

*No changes.*

### APIs

#### DOM

* `PerformanceEventTiming` is now enabled by default (Firefox bug 1701029).
* The content of `<input>` and `<textarea>` elements can now be manipulated using `Document.execCommand()` commands by default, preserving edit history and providing parity with other browsers, without `contentEditable` or any lengthy workarounds required (Firefox bug 1220696).

#### Removals

* The following sensor events and their associated handlers have been removed (primarily for better compatibility with other major browser engines, and to address concerns related to privacy leaks):
    + `DeviceProximityEvent` and its event handler `window.ondeviceproximity` (Firefox bug 1699707).
    + `UserProximityEvent` and its event handler `window.onuserproximity`) (Firefox bug 1699707).
    + `DeviceLightEvent` and its event handler `window.ondevicelight` (Firefox bug 1701824).
### WebDriver conformance (Marionette)

#### Removals

* The `rotatable` capability that is not part of the WebDriver specification is no longer used (Firefox bug 1697630).
Changes for add-on developers
-----------------------------

* Dynamic JS module imports are now working in WebExtension content scripts (Firefox bug 1536094).
* Extension resources listed in web\_accessible\_resources can be loaded regardless of the request's CORS mode (Firefox bug 1694679).
* Firefox's UI has been redesigned, which affects usage of the `theme` API. The `tab_background_separator` and `toolbar_field_separator` properties are no longer supported. The `tab_line` and `toolbar_vertical_separator` will behave differently. For more information, see Changes to themeable areas of Firefox in version 89.
* The `pageAction` button can no longer be pinned or unpinned from the address bar, because the three-dot meatball menu is no longer visible by default (Firefox bug 1691454). As a result, the `pinned` property of the `page_action` manifest key no longer has any effect (Firefox bug 1703537).
* The "Remove from Address Bar" context menu item has been removed from the `pageAction` button (Firefox bug 1704474). For alternatives to this functionality, see Firefox bug 1712556.
Older versions
--------------

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


Firefox 27 for developers - Mozilla

Firefox 27 for developers
=========================

Firefox 27 was released on February 4, 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

* Breakpoints can now be set on DOM events.
* JavaScript in the debugger panel can be unminified, using the { } button.
* The inspector now has an "edit-element-html" feature, without needing an add-on.
* Background-URLs and colors have preview in inspector. Even hovering over canvas elements will give a pop-up with an image preview.
* Reflow logging has been added.
* Styles of SVG elements are now inspectable (Firefox bug 921191).
* Failure to find the image when clicking URL link in CSS inspector has been fixed (Firefox bug 921686).
* The `X-SourceMap` header is now supported (Firefox bug 765993).

More details in this post.

### CSS

* The `-moz-grab` and `-moz-grabbing` keywords on the CSS `cursor` property have been unprefixed to `grab` and `grabbing` (Firefox bug 880672).
* Support for the `-moz-hsla()` and `-moz-rgba()` functional notations has been dropped. Only the unprefixed versions, `hsla()` and `rgba()` are supported from now on (Firefox bug 893319).
* The "`true`" value for `text-align` has been added (Firefox bug 929991).
* Experimental support of `position:sticky` is now active by default on non-release builds (Firefox bug 902992). For releases builds, the `layout.css.sticky.enabled` preference still needs to be set to `true`.
* The `all` shorthand property has been added (Firefox bug 842329).
* The `unset` global value has been added; it allows to reset any CSS property (Firefox bug 921731).
* Curly braces are no longer allowed in HTML `style` attributes: doing `<div style="{ display: none }">` was working in quirks mode, but won't anymore Firefox bug 915053.
* The `overflow` property now works on `<fieldset>` (Firefox bug 261037).
### HTML

* The `color` value of the `<input>` `type` attribute has been implemented on desktop platforms. It was already available on mobile ones.
* The `allow-popups` directive is now supported with the `sandbox` attribute of the `<iframe>` element (Firefox bug 766282).
* Blending of HTML elements using the `mix-blend-mode` property has been implemented. The `layout.css.mix-blend-mode.enabled` preference must be set to `true` (Firefox bug 902525).
* The `typeMustMatch` property of the `<object>` element is now supported (Firefox bug 827160).
### JavaScript

ECMAScript 2015 implementation continues!

* The spread operator is now supported in Function calls (Firefox bug 762363).
* The mathematical function `Math.hypot()` has been implemented (Firefox bug 896264).
* The `yield*` expression is now implemented (Firefox bug 666396).
* The `MapIterator`, `SetIterator` and `ArrayIterator` objects now match the specification (Firefox bug 881226).
* for...of loops now expect the ES2015 standard iterator protocol moving away from SpiderMonkey old iterator protocol using `StopIteration`.
* `String.match` and `String.replace` now reset `RegExp.lastIndex` (Firefox bug 501739).
### Interfaces/APIs/DOM

* Support for the two `setRange()` methods on the `HTMLInputElement` interface has been added (Firefox bug 850364).
* Support for the two `setRange()` methods on the `HTMLTextAreaElement` interface has been added (Firefox bug 918940).
* The methods `getAllKeys()` and `openKeyCursor()` have been added to `IDBObjectStore` (Firefox bug 920633 and Firefox bug 920800).
* The `HTMLFormControlsCollection` interface has been implemented (Firefox bug 913920).
* The `CanvasRenderingContext2D` interface now supports the two methods `getLineDash()` and `setLineDash()` and the `lineDashOffset` property (Firefox bug 768067).
* The `typeMustMatch` attribute has been implemented on the `HTMLObjectElement` interface (Firefox bug 827160).
* The `copyFromChannel()` and `copyToChannel()` methods have been added to `AudioBuffer` (Firefox bug 915524).
* `Event.isTrusted()` is now unforgeable (Firefox bug 637248).
* The WebRTC API's `RTCIceCandidate` object now includes a `toJSON()` method to help with signaling and debugging (Firefox bug 928304).
* The `Navigator.vibrate()` method has been adapted to match the final specification: It now returns `false` when the list is too long or has too large entries, instead of throwing (Firefox bug 884935).
* As part of the ongoing effort to standardize global objects, the non-standard stylesheet change event interfaces, including `StyleRuleChangeEvent`, `StyleSheetApplicableStateChangeEvent` and `StyleSheetChangeEvent`, are no longer available from Web content. The `CSSGroupRuleRuleList` interface, the implementation detail of `CSSRuleList`, has also been removed (Firefox bug 872934 and Firefox bug 916871).
* `atob` now ignores whitespaces (Firefox bug 711180).
* WebGL: `MOZ_` prefixed extension strings are deprecated. Support for them will be removed in the future. Use unprefixed extension string only. To get draft extensions, set the `webgl.enable-draft-extensions` preferences (Firefox bug 924176).
### MathML

*No change.*

### SVG

* Blending of SVG elements using the `mix-blend-mode` property has been implemented. The `layout.css.mix-blend-mode.enabled` preference must be set to `true` (Firefox bug 902525).
Changes for addon and Mozilla developers
----------------------------------------

* The `downloads-indicator` button has gone away. You should now use the `downloads-button` element. If you need to check that it has loaded its overlay, check for the `indicator` attribute on that button.
* The `chrome://browser/skin/downloads/indicator.css` stylesheet is no longer referenced in Firefox.
Security
--------

* TLS 1.2 has been implemented for improved security (Firefox bug 861266).
See also
--------

* List of changes in Marionette for Firefox 27.
### Older versions

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

Firefox 85 for developers
=========================

This article provides information about the changes in Firefox 85 that will affect developers. Firefox 85 was released on January 26, 2021.

**Note:** See also January brings us Firefox 85 on Mozilla Hacks.

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

### Developer Tools

* Developers can now use the Page Inspector to toggle the `:focus-visible` pseudo-class for the currently selected element (in addition to the pseudo classes that were previously supported: `:hover`, `:active` and `:focus`, `:focus-within`, and `:visited`). (Firefox bug 1617608).
### HTML

* `<link rel="preload">` is now enabled. (Firefox bug 1626997).

#### Removals

* The `<menuitem>` HTML element is no longer available — it has been hidden behind the `dom.menuitem.enabled flag`. (Firefox bug 1680596).
### CSS

* The `:focus-visible` pseudo-class is now enabled. (Firefox bug 1445482).
* The `pinch-zoom` value for the `touch-action` property is now enabled. (Firefox bug 1329241).
### JavaScript

* The `collation` property can now be specified in the options passed to the `Intl.Collator()` constructor (Firefox bug 1670062). This allows developers to write code with greater clarity:

```js
// Old method
let pinyin = new Intl.Collator(["zh-u-co-pinyin"]);
// New method
let pinyin = new Intl.Collator("zh", { collation: "pinyin" });
```

### Plugins

* Flash support has been completely removed from Firefox (Firefox bug 1675349).
### APIs

*No changes.*

### WebDriver conformance (Marionette)

* Fixed a potential page load timeout situation when `WebDriver:ElementClick`
 is called for a link with a `target` other than `_blank` (Firefox bug 1678455).
* Using web element references on browsing contexts other than the originating one now correctly returns a `no such element` error instead of a `stale element reference` error (Firefox bug 1684827).

#### Known bugs

* WebDriver commands following a call to `WebDriver:SwitchToFrame` can 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 might not always raise a "stale element" error, and can also lead to a "no such element" error. To prevent this, set the `marionette.actors.enabled` preference to `false` (Firefox bug 1690308).
Changes for add-on developers
-----------------------------

*No changes.*

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

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


Firefox 117 for developers - Mozilla

Firefox 117 for developers
==========================

This article provides information about the changes in Firefox 117 that affect developers. Firefox 117 was released on August 29, 2023.

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

### HTML

No notable changes.

### CSS

* The CSS Nesting module is now supported in Firefox, along with the `&` nesting selector. This allows developers to write nested CSS, which helps with the readability, modularity, and maintainability of CSS stylesheets. It also potentially helps reduce CSS file size, decreasing download sizes. (Firefox bug 1835066, Firefox bug 1840781)
* The `math-style` and `math-depth` properties are now supported, as well as the `math` value for the `font-size` property (Firefox bug 1845516).
* The `contain-intrinsic-size: auto none` syntax is now supported, which allows for using the last-remembered size of an element if possible and falls back to `contain-intrinsic-size: none` otherwise.
 This is useful for grid and multi-column layouts to allow elements to be laid out as though they have no contents instead of 0px height (Firefox bug 1835813).
### JavaScript

No notable changes.

### SVG

* Inline SVGs now support `<script>` elements with `type="module"`, `defer`, and `async` attributes.
 This allows SVGs to use modern JavaScript features, including ES modules, and to load scripts asynchronously (Firefox bug 1839954).
### HTTP

* Fixed a bug where the Content-Security-Policy `'strict-dynamic'` source expression was not being enforced in `default-src` directives.
 The behavior now matches the specification where `default-src` directive values are used as a fallback when `script-src` is not provided (Firefox bug 1313937).
* The `Range` header is now a CORS-safelisted request header when the value is a single byte range (e.g., `bytes=100-200`).
 This allows the `Range` header to be used in cross-origin requests without triggering a preflight request, which is useful for requesting media and resuming downloads (Firefox bug 1733981).
### APIs

* The `CanvasRenderingContext2D.getContextAttributes()` method can now be used to get the 2D context attributes being used by the browser (Firefox bug 1517786).
* The `ReadableStream.from()` static member is now supported, allowing developers to construct a readable stream from any iterable or async iterable object (Firefox bug 1772772).
* WebRTC Encoded Transforms are now supported, allowing web applications to modify incoming and outgoing WebRTC encoded video and audio frames using a `TransformStream` running in a worker.
 The supported interfaces include: `RTCRtpScriptTransform`, `RTCRtpScriptTransformer`, `RTCRtpSender.transform`, `RTCRtpReceiver.transform`, `RTCEncodedVideoFrame`, and `RTCEncodedAudioFrame`, and the `RTCTransformEvent` and worker `rtctransform` event (Firefox bug 1631263).
* `CSSStyleRule` now inherits from `CSSGroupingRule` instead of directly from `CSSRule`. As a result, it additionally implements the property `cssRules` and the methods `deleteRule()` and `insertRule()` (Firefox bug 1846251).
### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Added the `browser.close` command that allows users to terminate all WebDriver sessions and close the browser (Firefox bug 1829334).
* Added the `browsingContext.setViewport` command that allows users to change the dimensions of a top level browsing context (Firefox bug 1838664).
* Added the `browsingContext.fragmentNavigated` event which is emitted for same-document navigations (Firefox bug 1841039).
* Added support for the `background` argument of the `browsingContext.create` command, which will force the new context to be created in the background. This argument is optional and defaults to `false`, meaning that `browsingContext.create` now opens new contexts in the foreground by default (Firefox bug 1843507).
* Added support for the `clip` argument of the `browsingContext.captureScreenshot` command, which allows to restrict the screenshot either to a specific area or to an element. When clipping to an element, you can optionally scroll the element into view before taking the screenshot (Firefox bug 1840998).
* All commands and events related to a navigation will now provide a `navigation` id, which is a `UUID` identifying a specific navigation. This property is available in the `browsingContext.navigate` response, in the `browsingContext.load`, `browsingContext.domContentLoaded`, `browsingContext.fragmentNavigated` events, as well as in all `network` events created for a navigation request (Firefox bug 1763122, Firefox bug 1789484, Firefox bug 1805405).
* `headers` and `cookies` in `network` events are now serialized as `network.BytesValue`, which will provide a better support for non-UTF8 values (Firefox bug 1842619).
* The `browsingContext.create` command will now wait until the created context has a valid size (Firefox bug 1847044).
### Developer tools

* The Network Monitor now shows information about proxied requests, including the proxy address, the proxy status, and the proxy HTTP version in the Headers tab (Firefox bug 1707192).
* The area selected by the Measuring Tool can now be resized and moved using keyboard shortcuts.
 Pressing the arrow keys moves the selected area, while pressing `Ctrl` + arrow keys (or `Cmd` + arrow keys on a Mac) resizes the selected area.
 Holding down the `Shift` key accelerates the moving and resizing actions when using these key combinations (Firefox bug 1262782).
* Properties that are not supported in highlight pseudo-elements (`::highlight()`, `::target-text`, `::spelling-error`, `::grammar-error`, and `::selection`) are now reported in the Page Inspector CSS rules panel (Firefox bug 1842157).
Changes for add-on developers
-----------------------------

No notable changes.

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

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


Firefox 16 for developers - Mozilla

Firefox 16 for developers
=========================

Firefox 16 shipped on October 9, 2012. This article lists key changes that are useful for not only Web developers to know about, but also Firefox and Gecko developers as well as add-on developers.

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

### HTML

* The `<meter>` element is now supported.
* Support for the HTML Microdata API has been added. (bug 591467)
* `<canvas>` now supports the CSS `currentcolor` in all case. (Firefox bug 629882)
* `<input>` now allows filtering based on arbitrary mimetypes in `accept` (Firefox bug 565274).
* Two new attributes, `width` and `height` have been added to the `<input>` element (bug 683855).
### CSS

* Support for the standard, unprefixed version of CSS Animations has been landed (bug 762302).
* Support for reverse animation direction (keywords `reverse` and `alternate-reverse` on the `animation-direction` property) has been added. (bug 655920).
* You can now animate the CSS `height` and `width` properties.
* The `animation-duration` and `transition-duration` CSS properties now reject negative values (and do not handle them as `0s` anymore) (bug 773102).
* Support for the standard, unprefixed version of CSS Transforms has been landed (bug 745523). `<length>` cannot be used for translation values in `matrix()` and `matrix3d()` anymore (Firefox bug 719054).
* Support for the standard, unprefixed version of CSS Gradients has been landed. Note that the syntax has changed significantly since the prefixed version, so you should read up on this (bug 752187).
* The `-moz-box-sizing` implementation has been updated to apply to table cells too (bug 338554).
* Support for the standard, unprefixed version of `calc()` has been landed (bug 771678).
* The `<resolution>` CSS data type has been extended to support the `dppx` (bug 741644).
* On screen, for media queries, `dppx`, `dpi`, and `dpcm` are now representing values based on CSS pixels and no more with the physical units (bug 771390).
* Three new pseudo-classes `:-moz-meter-optimum`, `:-moz-meter-sub-optimum`, and `:-moz-meter-sub-sub-optimum` have been added for accessing/styling a `<meter>` element in a particular state (bug 660238).
* The `appearance` property gains two new values: `meterbar` and `meterchunk`. They represent components inside the `<meter>` element (bug 659999).
* The `min-width` and `min-height` now supports the `auto` keyword for flex items (and resolves to `0` for other items) (Firefox bug 763689).
### API/DOM

* Two new properties `width` and `height` have been added to the `HTMLInputElement` interface (bug 683855).
* IndexedDB properties and methods have been unprefixed. (bug 726378)
* The Battery API is now unprefixed.
* The Vibration API has been unprefixed.
* The non-standard `Keyboard` interface, prefixed as `mozKeyboard`, now has the `Keyboard.setSelectedOption()` and `Keyboard.setValue()` methods, as well as the `Keyboard.onfocuschange`. *This interface, only available for Firefox OS, has been removed in Firefox 31.*
* The `java` and `Packages` global objects have been removed. See LiveConnect.
* The `CSSRule.type` associated with `CSSNamespaceRule` has been updated from `UNKNOWN_RULE` (`0`) to `NAMESPACE_RULE` (`10`) (bug 765590).
* WebSMS API: `SmsRequest` has been superseded by the more general `DOMRequest`.
* The non-standard `Element.scrollTopMax` and `Element.scrollLeftMax` read-only properties have been added (Firefox bug 766937).
* The second parameter of `Blob()`, when set to `null` or `undefined`, is now being handled as an empty dictionary (Firefox bug 7691119).
### JavaScript

* `Number` objects now offer `isFinite()`, `toInteger()`, and `isInteger()` methods. (bug 761480, bug 761495)
* The Harmony spread operator is now supported in `Array` initializers (bug 574130). Note it is not yet supported in calls (bug 762363).
* The experimental `TypedArray.prototype.move()` method has been added (available in Aurora and Nightly channels only) (Firefox bug 730873).
### WebGL

*No change.*

### SVG

*No change.*

### MathML

* The `lspace` and `rspace` attributes of `<mo>` now correctly default to `thickmathspace`.
### Network

### Developer tools

* There's now a handy developer toolbar you can access by going to Tools > Web Developer > Developer Toolbar, or by pressing Ctrl-Shift-V (Cmd-Opt-V on Mac OS X). This toolbar offers a command line interface as well as buttons for quickly accessing useful tools. The graphical command line interface *GCLI* is easy to expand and additional commands are expected in the future. Type "help" to get a list of supported commands.
* The Web Console now displays an error count so you can quickly see how much work you have ahead of you.
* The Scratchpad now offers a list of recently opened files.
Changes for Open Web App developers
-----------------------------------

* Initial Open Web App support has been implemented in the desktop versions of Firefox (that is, on Windows, Mac OS X, and Linux).
Changes for add-on and Mozilla developers
-----------------------------------------

### Interface changes

`nsIPrivateDOMEvent` has been merged into `nsIDOMEvent`. (Firefox bug 761613)

#### New interfaces

#### Removed interfaces

The following interfaces have been removed.


Firefox 6 for developers - Mozilla

Firefox 6 for developers
========================

Firefox 6, based on Gecko 6.0, was released on August 16, 2011. This article provides links to information about the changes that affect developers in this release.

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

### HTML

* The HTML5 `<progress>` element, which lets you create a progress bar, is now supported.
* The parsing of the HTML5 `<track>` element, which specifies text tracks for media elements, is now supported. This element should appear in the DOM now, though its behavior is still not implemented.
* The `<iframe>` element is now clipped correctly by its container when the container's corners have been rounded using the `border-radius` property.
* `<form>` elements' text `<input>` fields no longer support the XUL `maxwidth` property; this was never intentional, and is in violation of the HTML specification. You should instead use the `size` attribute to set the maximum width of input fields.
* The `<canvas>` `CanvasRenderingContext2d` properties `fillStyle` and `strokeStyle` used to ignore garbage included after a valid color definition; now this is correctly treated as an error. For example, "red blue" as a color used to be treated as "red", when it should have been ignored.
* The width and height of `<canvas>` elements can now properly be set to 0px; previously, these were getting arbitrarily set to 300px when you tried to do that.
* Support for the HTML custom data attributes (`data-*`) has been added. The DOM `element.dataset` property allows to access them.
* When a `<textarea>` element receives focus, the text insertion point is now placed, by default, at the beginning of the text rather than at the end. This makes Firefox's behavior consistent with other browsers.
### CSS

`-moz-text-decoration-color`

This new property lets you set the color used by text decorations, such as underlines, overlines, and strikethroughs.

`-moz-text-decoration-line`

This new property lets you set the kind of text decorations added to an element.

`-moz-text-decoration-style`

This new property lets you set the style of text decorations, such as underlines, overlines, and strikethroughs. Styles include single-strokes, double strokes, wavy lines, dotted lines, and so forth.

`-moz-hyphens`

This new property lets you control how hyphenation of words during line wrapping is handled.

`-moz-orient`

A new (currently Mozilla-specific) property which lets you control the vertical or horizontal orientation of certain elements (particularly `<progress>`).

`::-moz-progress-bar`

A Mozilla-specific pseudo-element that lets you style the area of an `<progress>` element representing the completed portion of a task.

#### Other changes

* The `@-moz-document` property has a new `regexp()` function, which lets you match the document's URL to a regular expression.
* The `azimuth` CSS property is no longer supported, as we have removed what little code we had for the `aural` media group. It was never significantly implemented, so it made more sense to remove the crufty implementation for the time being rather than try to patch it up.
* In the past, the `:hover` pseudoclass was not applied to class selectors when in quirks mode; for example, `.someclass:hover` did not work. This quirk has been removed.
* The `:indeterminate` pseudo-class can be applied to `<progress>` elements. This is non-standard, but we hope it will be adopted by other browsers, because it will be useful.
* The `-moz-win-exclude-glass` value has been added to the `-moz-appearance` CSS property in order to exclude opaque regions in Aero Glass glaze effects on Windows systems.
* Firefox bug 658949 changed how the hash (#) symbol is treated in data URLs which may break CSS stylesheets which contain such a symbol if it is not escaped.
### DOM

Using media queries from code

You can now test the result of a media query string programmatically using the `window.matchMedia()` method and the `MediaQueryList` interface.

Touch events

Firefox 6 adds support for W3C standard touch events; these make it easy to interpret one or more touches at a time on touch-sensitive surfaces such as touch screens and trackpads.

Server-sent events

Server-sent events make it possible for a web application to ask a server to send events just like any locally-created DOM event.

* `navigator.securityPolicy`, which has returned an empty string for a long time, has been removed outright.
* `BlobBuilder` is now implemented, although for now it's prefixed (so you need to use `MozBlobBuilder`).
* The `Document.height` and `Document.width` have been removed. Firefox bug 585877
* The `DocumentType` object's `entities` and `notations` properties, which were never implemented and always returned `null`, have been removed, since they've been removed from the specification anyway.
* The `DOMConfiguration` interface and the `document.domConfig` property that used it have both been removed; they were never supported and have since been removed from the DOM specification.
* The `hashchange` event now correctly includes the `newURL` and `oldURL` fields.
* The `FileReader` interface's `abort()` method now throws an exception when used if no file read is in progress.
* The `window.postMessage()` method now uses the structured clone algorithm to let you pass JavaScript objects instead of just strings from one window to another.
* The `window.history` API now uses the structured clone algorithm to serialize the objects you pass to the `pushState()` and `replaceState()` methods; this lets you use more complex objects (including those that contain cyclic graphs of references).
* You can now detect when printing has been initiated and has completed by listening for the new `beforeprint` and `afterprint` events.
* The `document.strictErrorChecking` property has been removed, since it was never implemented and was removed from the DOM specification.
* The standard `event.defaultPrevented` property is now supported; you should use this instead of the non-standard `getPreventDefault()` method to detect whether or not `event.preventDefault()` was called on the event.
* The `window.top` property is now properly read only.
* DOM views, which we never documented, have been removed. This was a bit of implementation detail that was unnecessarily complicating things, so we got rid of it. If you notice this change, you're probably doing something wrong.
* The `EventTarget` function `addEventListener()`'s `useCapture` parameter is now optional, as it is in WebKit (and as per the latest version of the specification).
* The `mozResponseArrayBuffer` property of the `XMLHttpRequest` object has been replaced with the `responseType` and `response` properties.
* The `element.dataset` property has been added to the `HTMLElement` interface allowing access to the `data-*` global attributes of an element.
* The `CustomEvent` interface has been implemented. (see Firefox bug 427537)
* For security reasons, `data:` and `javascript:` URLs no longer inherit the security context of the current page when the user enters them in the location bar; instead, a new, empty, security context is created. This means that script loaded by entering `javascript:` URLs in the location bar no longer has access to DOM methods and the like, for example. These URLs continue to work as before when used by script, however.
### JavaScript

* In the past, it was possible to use the `new` operator on several built-in functions (`eval()`, `parseInt()`, `Date.parse()`, …) that should not have allowed it, according to the specification. This behavior is no longer supported. Using the `new` operator in this way was never officially supported and was not widely done, so it's unlikely that this change affects you.
* ECMAScript 2015 WeakMaps have been added as a prototype implementation.
### SVG

* The `pathLength` attribute is now supported.
* SVG patterns, gradients, and filters now work correctly when loaded from `data:` URLs.
### MathML

* The implementation of `<mstyle>` has been corrected.
### Accessibility (ARIA)

* A state change event is now correctly sent when the value of `aria-busy` changes.
* An attribute change event is now correctly sent when `aria-sort` occurs.
### Networking

WebSockets

WebSockets was updated to protocol version 07 for Firefox 6. In addition, the global `WebSocket` object has been renamed to `MozWebSocket` to prevent it from incorrectly being used to detect the availability of unprefixed WebSockets.

* Parsing of the `Content-Disposition` header has been fixed to properly interpret backslash-escaped ASCII characters as just that character itself. Previously it was incorrectly replacing that character with an underscore ("\_").
* The value of the path field on `Set-Cookie` headers is now interpreted correctly when quotes are used; previously, they were being treated as part of the path string instead of as delimiters. **This change may affect compatibility with some websites**, so authors should check their code.
* The `Upgrade` request header is now supported; you can request an upgrade of an HTTP channel to another protocol by calling `nsIHttpChannelInternal.HTTPUpgrade()`.
### Other changes

* Support for microsummaries has been removed; these were never widely used, were not very discoverable, and continuing to support them was making improvements to the Places (bookmark and history) architecture difficult.
* WebGL now supports the `OES_texture_float` extension.
* The new *Scratchpad* tool provides a handy place to experiment with JavaScript code.
* The `console.trace()` method has been added to the Console API (Firefox bug 585956).
Changes for Mozilla and add-on developers
-----------------------------------------

For an overview of the changes you may need to make in order to make your add-on compatible with Firefox 6, see Updating add-ons for Firefox 6.

**Note:** Firefox 6 requires that binary components be recompiled, as do all major releases of Firefox. See Binary Interfaces for details.

### JavaScript code modules

#### FileUtils.jsm

* The `openSafeFileOutputStream()` method now opens files with the `DEFER_OPEN` behavior flag instead of attempting to open them immediately.

#### XPCOMUtils.jsm

* The new `importRelative()` method lets you load one JavaScript code module from a path relative to the path of another JavaScript code module. This makes it easier to build modules that depend on each other.
### XPCOM

* `nsCOMArray<T>` now has a `RemoveObjectsAt()` method for removing multiple objects at once from the array.
### Using the DOM from chrome

Using the DOM File API in chrome code

Although you've always been able to use the DOM File API from chrome code, the `File` constructor now supports specifying a local pathname string when used from chrome. In addition, you can also specify the file to access using the DOM File API using an `nsIFile` object.

### Interface changes

* `nsINavHistoryQueryOptions` now supports sorting in frequency order using the new `SORT_BY_FREQUENCY_ASCENDING` and `SORT_BY_FREQUENCY_DESCENDING` constants.
* `nsIFilePicker` has a new `nsIFilePicker.addToRecentDocs` attribute, which lets you indicate that the selected file should be added to the user's "recent documents" list if there is one. This attribute has no effect when in private browsing mode.
* `nsINavBookmarkObserver` methods with item ID parameters now require a GUID as well.
* `nsIPrefBranch.clearUserPref()` no longer throws an exception if the specified preference doesn't exist or has no user-set value. Instead, it does nothing.
* The `nsIMemoryReporter` interface now provides support for indicating the kind of memory being described (mapped, heap, or other).
* The `stateData` attribute of `nsISHEntry` now returns a `nsIStructuredCloneContainer`.
* `nsIURI` has a new `nsIURI.ref` attribute, which returns the reference portion (the part after the "#") of the URI. It also has new methods `nsIURI.cloneIgnoringRef()` which clones the `nsIURI` without the ref member and `nsIURI.equalsExceptRef()` which compares to another `nsIURI` ignoring the ref member.

#### New interfaces

`mozIAsyncFavicons`

A new service that lets you access the favicon service asynchronously.

`nsIEventSource`

*Details forthcoming.*

`nsIGSettingsCollection`

*Details forthcoming.*

`nsIGSettingsService`

*Details forthcoming.*

`nsIHttpUpgradeListener`

The callback interface for handling HTTP upgrade requests via the `nsIHttpChannelInternal.HTTPUpgrade()` method.

`nsIStructuredCloneContainer`

A container for objects that have been serialized using the structured clone algorithm.

`nsITelemetry`

Implements telemetry support to allow recording of telemetry data to be used to present histograms for performance tracking purposes. See Firefox bug 649502 and Firefox bug 585196.

`nsITimedChannel`

See Firefox bug 576006.

`nsIWebSocketListener`

See Firefox bug 640003.

`nsIWebSocketProtocol`

See Firefox bug 640003.

#### Removed interfaces

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

* `nsIDOMDocumentEvent` (see Firefox bug 655517)
* `nsIDOMDocumentTraversal` (see Firefox bug 655514)
* `nsIDOMDocumentRange` (see Firefox bug 655513)
* `IWeaveCrypto` (see Firefox bug 651596)
* `nsIDOM3DocumentEvent` (see Firefox bug 481863)
* `nsIDOMAbstractView`
* `nsILiveTitleNotificationSubject`
* `nsIPlugin` (see Firefox bug 637253)
* `nsIPluginInstance` (see Firefox bug 637253)
* `nsIHTMLEditRules` (see Firefox bug 633750)
* `nsIXSLTProcessorObsolete` (see Firefox bug 649534)
### Other changes

Using preferences from application code

A new static API is available for easily accessing preferences; this is only available to application code and can't be used by add-ons.

See also
--------

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

Firefox 74 for developers
=========================

This article provides information about the changes in Firefox 74 that will affect developers. Firefox 74 was released on March 10, 2020.

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

### Developer tools

#### Web console

* The `$x()` web console helper's third argument (result type) now accepts simple string values as well as `XPathResult` constants (bug 1602591).
* Freshly landed support for the optional chaining operator "?." which can also be used with Console's autocomplete (bug 1594009).
* The Debugger can now inspect and debug nested workers (bug 1590766)
### HTML

*No changes.*

### CSS

* `text-underline-position` is now enabled by default (bug 1606997).
* The `text-underline-offset` and `text-decoration-thickness` properties now accept percentage values (bug 1607534).
* The `auto` value of the `outline-style` property has been enabled by default (Firefox bug 1031664).

#### Removals

* The `-moz-` prefixed-Multiple-column layout properties have been removed (Firefox bug 1308636).
### SVG

*No changes.*

### JavaScript

* The Optional chaining operator has been implemented (Firefox bug 1566143).
* When a JavaScript URL (`javascript:`) is evaluated and the result is a string, this string is parsed to create an HTML document, which is then presented. Previously, this document's URL (as reported by the `document.location` property, for example) was the originating `javascript:` URL; it is now correctly the URL of the document the `javascript:` URL was evaluated in (Firefox bug 836567).

#### Removals

* The `Object.toSource()` method and the global function `uneval()` are no longer available for use by web content or extensions (bug 1565170).
### APIs

#### DOM

* The `IDBTransaction.commit()` method has been implemented (Firefox bug 1497007).

#### DOM events

* Firefox 74 now supports the `languagechange_event` event and its companion event handler property, `onlanguagechange`, which is triggered when the user changes their preferred language (Firefox bug 1154779). This was previously listed in our compatibility database as supported from Firefox 3.5, but this was in error.

#### Canvas and WebGL

* The `TextMetrics` interface has been extended to contain four more properties measuring the actual bounding box — `actualBoundingBoxLeft`, `actualBoundingBoxRight`, `actualBoundingBoxAscent`, and `actualBoundingBoxDescent`. Text metrics can be retrieved using the `CanvasRenderingContext2D.measureText()` method (Firefox bug 1102584).

#### Removals

* The non-standard `IDBDatabase.mozCreateFileHandle()` method has been removed, in favor of the (also non-standard) `IDBDatabase.createMutableFile()` method (Firefox bug 1024312).
* The non-standard `IDBMutableFile.getFile()` method has been removed (Firefox bug 1607791).
* The non-standard `HTMLCanvasElement` method `mozGetAsFile()` has been removed, after being deprecated several years ago (Firefox bug 1588980).
* The `FetchEvent` property `isReload` has been removed, from both Firefox and the specification (Firefox bug 1264175).
### HTTP

* The `Cross-Origin-Resource-Policy` header is now enabled by default (bug 1602363).
### Security

* TLS 1.0 and 1.1 support has been removed from Firefox; you'll need to make sure your web server supports TLS 1.2 or 1.3 going forward. From now on, Firefox will return a Secure Connection Failed error when connecting to servers using the older TLS versions (Firefox bug 1606734).
* Starting in Firefox 74, when a site delegates permission to access a resource to embedded content in an `<iframe>` using the `allow` attribute, and the embedded page requests permission to use that resource, the parent page prompts the user for permission to use the resource and share it with the embedded domain, rather than both the outer and inner pages prompting the user for permission. If the outer page doesn't have the permission requested by the `allow` attribute, the `<iframe>` is immediately denied access without prompting the user Firefox bug 1483631.
### Plugins

*No changes.*

### WebDriver conformance (Marionette)

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

### API changes

* Shortcut keys can now be unassigned in `Commands.update` by passing an empty value of `shortcut` Firefox bug 1475043.
* `urlclassification`s are now returned as part of the `details` in each event of `webrequest`, providing information on whether a request is classified as fingerprinting or tracking Firefox bug 1589494.
### Manifest changes

*No changes.*

See also
--------

* Hacks blog post: Security means more with Firefox 74
Older versions
--------------

* Firefox 73 for developers
* Firefox 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers
* Firefox 69 for developers
* Firefox 68 for developers
* Firefox 67 for developers
* Firefox 66 for developers
* Firefox 65 for developers
* Firefox 64 for developers
* Firefox 63 for developers
* Firefox 62 for developers
* Firefox 61 for developers
* Firefox 60 for developers
* Firefox 59 for developers
* Firefox 58 for developers
* Firefox 57 for developers
* Firefox 56 for developers
* Firefox 55 for developers
* Firefox 54 for developers
* Firefox 53 for developers
* Firefox 52 for developers
* Firefox 51 for developers
* Firefox 50 for developers
* Firefox 49 for developers
* Firefox 48 for developers
* Firefox 47 for developers
* Firefox 46 for developers
* Firefox 45 for developers
* Firefox 44 for developers
* Firefox 43 for developers


Firefox 45 for developers - Mozilla

Firefox 45 for developers
=========================

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

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

### Developer Tools

Highlights:

* Full-text search in the Page Inspector
* Heap snapshot diffing in the Memory tool
* DomContentLoaded and load events shown in the Network Monitor
* Animation inspector improvements

All devtools bugs fixed between Firefox 43 and Firefox 44.

### HTML

* Content Security Policy can now be set directly on the `<meta>` element (Firefox bug 663570).
* The attribute `referrer` has been renamed `referrerpolicy` on `<img>`, `<area>`, `<a>`, and `<iframe>` (Firefox bug 1187357).
* Changes in the viewport, or a resize, now trigger the reselection of responsive images for `<img srcset>` (Firefox bug 1166138).
### CSS

* `word-spacing` now allows percentage values (Firefox bug 1038663).
* Our implementation of CSS Grids has been improved and is no more considered experimental; it is now activated by default in nightly and developer edition, but not for beta and release (Firefox bug 1000592):
    + Gutters, that is the `grid-column-gap`, `grid-row-gap`, and `grid-gap` properties are now supported (Firefox bug 1176792).
    + The implied minimum size of grid Items, that is the special `min-width` and `min-height` `auto` behavior has been implemented (Firefox bug 1176775).
    + `align-self` and `justify-self` are now supported on grid layouts (Firefox bug 1151213).
    + `align-content` and `justify-content` are now supported on grid layouts (Firefox bug 1151214).
    + Resolved value of grid-template-columns,grid-template-rows in px units (Firefox bug 978212).
    + The related feature `display`: contents has been supported since Firefox 37
* Implement full support for CSS Box Alignment for CSS Grid, support the missing values: `start`, `end`, `self-start`, `self-end`, `left`, `right`, `last-baseline`, `space-evenly` (Firefox bug 1176782). CSS Box Alignment currently applies only to CSS Flexbox and CSS Grid.
* [css-grid][css-flexbox] Implement grid/flex layout for <fieldset> (Firefox bug 1230207).
* The `inline-start` and `inline-end` values have been added to `float` and `clear` (Firefox bug 1122918). They are enabled by default on Nightly and Aurora (Dev edition), as well as on Firefox OS; to activate it on a release or beta version, you need to flip the `layout.css.float-logical-values.enabled` to `true`.
* The `text-emphasis`, `text-emphasis-style`, `text-emphasis-color`, and `text-emphasis-position` have been implemented; they are disabled by default (set `layout.css.text-emphasis.enabled` to true to activate them (Firefox bug 1040668).
* Several `-webkit` prefixed properties and values have been added for web compatibility, behind the preference `layout.css.prefixes.webkit`, defaulting to `false`:
    + Added `-webkit-backface-visibility`, `-webkit-perspective` and `-webkit-perspective-origin` for web compatibility, behind the preference `layout.css.prefixes.webkit`, defaulting to `false` (Firefox bug 1179444).
### JavaScript

* ES2015 Classes are now enabled by default (Firefox bug 1197932).
* Expression closures are deprecated and will now present a warning in the console (Firefox bug 995610).
* `String.prototype.replace` does not restore RegExp static properties after executing function parameter anymore (Firefox bug 1226936).
* `Math.random()` has been updated to the better XorShift128+ algorithm (Firefox bug 322529).
### Interfaces/APIs/DOM

#### DOM & HTML DOM

* For compatibility, the non-standard property `Node.innerText` has been implemented (Firefox bug 264412).
* The `HTMLImageElement.srcset` attribute now reacts to resize/viewport changes (Firefox bug 1166138).
* `Element.getAttributeNames()` has been implemented (Firefox bug 1228634).

#### WebGL

Our implementation of WebGL 2 has been extended:

* Support of programs and shaders has been added (Firefox bug 1048743).
* Support for uniforms and attributes has been added (Firefox bug 1048745).
* Framebuffer objects have been implemented (Firefox bug 1048732).
* Renderbuffer objects have been implemented (Firefox bug 1048733).

#### IndexedDB

*No change.*

#### Service Workers

* `Clients.get()` and `FetchEvent.clientId` have been implemented (Firefox bug 1222464.)
* `Clients.openWindow()` has been implemented (Firefox bug 1172870.)
* The options object that can be passed as a parameter when invoking `Clients.matchAll()` can now include an `includeUncontrolled` property. This is a boolean value — if set to `true`, the matching operation will return all service worker clients who share the same origin as the current service worker. Otherwise, it returns only the service worker clients controlled by the current service worker. The default is `false`.

#### WebRTC

*No change.*

#### New APIs

*No change.*

#### Miscellaneous

* Web Speech Synthesis API has been implemented on Firefox Desktop (Firefox bug 1003439).
* The `storage` event has been added.
* The interface `ComputedTiming` have been added to our experimental implementation of Web Animations API (Firefox bug 1108055).
* The `Document.onselectionchange` event handler property has been added (Firefox bug 1231193).
* After removing a video track from a media stream by calling `MediaStream.removeTrack()` you can now add another video track later using `MediaStream.addTrack()` and have it played (Firefox bug 1223696).
### MathML

*No change.*

### SVG

* SVG stroke hit-testing is buggy when cairo is the Moz2D backend (Firefox bug 676001).
* Unable to interact with elements who have large transform / translate values (Firefox bug 1217012).
### Audio/Video

* Fixed: Regression (since Firefox 41) whereby audio playback was stuttering due to duration time rounding errors (Firefox bug 1222866.)
HTTP
----

* The `jar:` protocol has been disabled by default when accessed from Web content; you may enable this if necessary by setting the `network.jar.block-remote-files` preference to `false` (Firefox bug 1215235).
Security
--------

* A `Content-Security-Policy` can now be specified using a `<meta>` element (Firefox bug 663570).
* Support of the `child-src` CSP policy directive has been implemented (Firefox bug 1045891).
* EV certificates with a validity greater than 27 months are now considered and handled as DV certificates (Firefox bug 1222903).
Changes for add-on and Mozilla developers
-----------------------------------------

### Interfaces

*No change.*

### XUL

* Tab Groups have been removed.
### JavaScript code modules

*No change.*

### XPCOM

*No change.*

### Search plugins

Starting in Firefox 45, search plugins located in the user's profile's `searchplugins` directory are no longer automatically loaded on startup. Instead, a list of user-installed plugins is maintained and only those plugins are loaded. In effect, this means that the only ways to install new search plugins are for the user to do so in the Firefox UX (via OpenSearch discovery, for instance) or for an add-on to install it. Also, when a new search plugin is installed, more information is recorded about where it came from, for future use by profile debugging and cleaning tools.

### Other

* WebIDL constructors could be called without the `new` operator in chrome context. Now such code will raise a `TypeError` as in Web content since Firefox 30. For example, `var req = XMLHttpRequest();` needs to be `var req = new XMLHttpRequest();`.
Older versions
--------------

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

Firefox 3.5 for developers
==========================

Firefox 3.5 (*released June 30, 2009)* introduces a number of new features, as well as additional and improved support for a wide variety of web standards. This article offers an extensive list, with links to articles covering the major improvements.

New developer features in Firefox 3.5
-------------------------------------

### For website and application developers

#### HTML 5 support

Using audio and video

Firefox 3.5 adds support for the HTML 5 `audio` and `video` elements.

Offline resources in Firefox

Firefox 3.5 now fully supports the HTML 5 offline resource specification.

Drag and drop

The HTML 5 drag and drop API allows support for dragging and dropping items within and between websites. This also provides a simpler API for use by extensions and Mozilla-based applications.

#### Newly-supported CSS features

Downloadable fonts support

The new `@font-face` @rule lets web pages provide downloadable fonts, so that sites can be rendered exactly as the page author expects.

CSS media queries

Firefox 3.5 now supports CSS media queries, which enhance support for media-dependent style sheets.

`::before` and `::after` updated to CSS 2.1

The `::before` and `::after` pseudo-elements have been updated to full CSS 2.1 support, adding support for the `position`, `float`, `list-style-*`, and some `display` properties.

`ch` units for length

The `ch` unit can now be used anywhere that accepts a unit of length. `1ch` is the width of the "0" (zero) character.

`opacity`

The `-moz-opacity` Mozilla extension to CSS has been removed in favor of the standard `opacity` property.

`text-shadow`

The `text-shadow` property, which allows web content to specify shadow effects to apply to text and text decorations, is now supported.

`overflow-wrap`

This newly-supported property lets content specify whether or not lines may be broken within words in order to prevent overflow when an otherwise unbreakable string is too long to fit on one line.

`white-space` property supports the `pre-line` value

The `white-space` property now accepts the `pre-line` value.

`-moz-box-shadow`

`-moz-border-image`

`-moz-column-rule`

`-moz-column-rule-width`

`-moz-column-rule-style`

`-moz-column-rule-color`

Firefox 3.5 adds support for these Mozilla extensions to CSS.

The `-moz-nativehyperlinktext` color value

This new color value represents the user's system's default hyperlink color.

The `-moz-window-shadow` property and the `:-moz-system-metric(mac-graphite-theme)` pseudo-class

These new CSS features were added to facilitate theming.

New values for `-moz-appearance`

The `-moz-win-glass` and `-moz-mac-unified-toolbar` values have been added to `-moz-appearance`.

Using CSS transforms

Firefox 3.5 supports CSS transforms. See `-moz-transform` and `-moz-transform-origin` for details.

`:nth-child``:nth-last-child``:nth-of-type``:nth-last-of-type``:first-of-type``:last-of-type``:only-of-type`

These selectors are all newly-supported in Firefox 3.5.

#### New DOM features

localStorage

Firefox 3.5 adds support for the Web Storage `localStorage` property, which provides a way for web applications to store data locally on the client's computer.

Using web workers

Firefox 3.5 supports web workers to allow easy multi-threading support in web applications.

Using geolocation

Firefox 3.5 supports the Geolocation API, which allows web applications to obtain information about the user's current location if a provider for that information is installed and enabled.

Locating DOM elements using selectors

The selectors API allows querying a document to locate the elements that match a given selection rule.

Mouse gesture events

Firefox 3.5 supports mouse gesture events such as trackpad swipes.

The `NodeIterator` object

The `NodeIterator` object provides support for iterating over the list of the nodes in a DOM subtree.

The `MozAfterPaint` event

This new DOM event is sent after painting updates in windows.

The `MozMousePixelScroll` event

This new DOM event allows detection of pixel-based mouse scroll wheel events instead of line-based scroll events.

#### New JavaScript features

New in JavaScript 1.8.1

An overview of all the changes in JavaScript 1.8.1.

`Object.getPrototypeOf()`

This new method returns the prototype of a specified object.

Using native JSON

Firefox 3.5 has native support for JSON.

New trim methods on the String object

The `String` object now has `trim()`, `trimLeft()`, and `trimRight()` methods.

#### Networking

Cross-site access controls for HTTP

In Firefox 3.5, it's now possible for HTTP requests, including those made by `XMLHttpRequest`, to work across domains if the server supports it.

Progress events for `XMLHttpRequest`

Progress events are now offered to enable extensions to monitor the progress of requests.

Improved Synchronous `XMLHttpRequest` support

DOM Timeout and Input Events are now suppressed during a synchronous `XMLHttpRequest`.

Controlling DNS prefetching

Firefox 3.5 provides DNS prefetching, whereby it performs domain name resolution ahead of time for links included in the current page, in order to save time when links are actually clicked. This article describes how you can tune your website to disable prefetching, or to adjust how prefetching operates.

#### New Canvas features

HTML 5 text API for `canvas` elements

Canvas elements now support the HTML 5 text API.

Shadow effects in a `canvas`

Canvas shadow effects are now supported.

`createImageData()`

The canvas method `createImageData()` is now supported, allowing code to specifically create an `ImageData` object instead of requiring it to be done automatically. This can improve performance of other `ImageData` methods by preventing them from having to create the object.

`moz-opaque` attribute

Added the `moz-opaque` attribute, which lets the canvas know whether or not translucency will be a factor. If the canvas knows there's no translucency, painting performance can be optimized. See also `HTMLCanvasElement.mozOpaque`.

#### New SVG features

Applying SVG effects to HTML content

You can now apply SVG effects to HTML and XHTML content; this article describes how.

#### Miscellaneous new features

ICC color correction in Firefox

Firefox 3.5 now supports ICC color correction for tagged images.

The `defer` attribute is now supported on `script` elements

This attribute indicates to the browser that it *may* choose to continue to parse and render the page without waiting for the script to finish executing.

### Other improvements

* The Text node's `wholeText` property and `Text.replaceWholeText()` method have been implemented.
* The property `element.children` has been added. It returns a *collection* of child elements of the given element.
* The property `HTMLElement.contentEditable` is now supported, to support editable elements.
* The Element Traversal API is now supported by the DOM Element object.
* HTML document nodes may now be cloned using `cloneNode()`.
* The non-standard `getBoxObjectFor()` DOM method has been removed. You should be using `getBoundingClientRect()` instead.
* Dispatched DOM events can now be re-dispatched. This makes Firefox 3.5 pass Acid 3 test 30.
* Improvements have been made to DOM 2 Range handling.
* In non-chrome scope, caught objects in exceptions are now the actual thrown object instead of an `XPConnect` wrapper containing the thrown object.
* SVG ID references are now live.
* SVG filters now work for `foreignObject`.
* The `GetSVGDocument()` method has been added to `object` and `iframe` elements for compatibility.
* Implicit setting of properties in object and array initializers no longer execute setters in JavaScript.
* The `gDownloadLastDir.path` variable has been renamed to `gDownloadLastDir.file` since it refers to an `nsIFile`, not a path.
* The `gDownloadLastDirPath` variable has been renamed to `gDownloadLastDirFile` since it refers to an `nsIFile`, not a path.
* Starting in Firefox 3.5, you can no longer use `data:` bindings in chrome packages that get `XPCNativeWrapper` automation.
### For XUL and add-on developers

If you're an extension developer, you should start by reading Updating extensions for Firefox 3.5, which offers a helpful overview of what changes may affect your extension.

#### New components and functionality

Supporting private browsing mode

Firefox 3.5 offers Private Browsing mode, which doesn't record the user's activities. Extensions may support private browsing following the guidelines offered by this article.

Security changes in Firefox 3.5

This article covers security-related changes in Firefox 3.5.

Theme changes in Firefox 3.5

This article covers theme-related changes in Firefox 3.5.

Monitoring Wi-Fi access points

Code with UniversalXPConnect privileges can now monitor the list of available access points, getting information on their SSIDs, MAC addresses, and signal strength. This can be used in tandem with Geolocation to offer Wi-Fi-based location service.

#### Notable changes and improvements

* The XUL `textbox` widget now offers a `search` type, for use as search fields.
* In order to support dragging and dropping tabs between windows, the `browser` widget now has a `swapDocShells()` method.
* Added the `level` attribute to the `panel` element; this specifies whether panels appear on top of other applications, or just on top of the window the panel is contained within.
* XUL elements now support the `clientHeight`, `clientWidth`, `scrollHeight`, and `scrollWidth` properties.
* `keyset` now include a `disabled` attribute.
* In addition, `keyset`s can now be removed using the node's `removeChild()` method.
* `mozIStorageStatement` had the `initialize()` method removed; consumers should use the `createStatement()` method instead to get a new statement object.
* The Storage API now offers support for asynchronous requests.
* The `nsICookie2` interface now exposes the time at which cookies were created in its new `creationTime` attribute.
* Added a flag to `nsIProtocolHandler` (`URI_IS_LOCAL_RESOURCE`) that is checked during chrome registration to make sure a protocol is allowed to be registered.
* Firefox now looks for plugins in `/usr/lib/mozilla/plugins` on Linux, as well as the previously supported locations.
* The plugin API has been updated to include support for private browsing mode; you may now use `NPN_GetValue()` to query the state of private browsing mode using the variable `NPNVprivateModeBool`.
New features for end users
--------------------------

### User experience

Location aware browsing

If you choose, you may allow Firefox 3.5 to share information about your current location with websites. Firefox 3.5 can use information about the network you're connected to in order to share your location. Of course, it asks for your permission before doing so, to ensure your privacy.

Open audio and video support

Firefox 3.5 supports embedded video and audio using the open Ogg format, as well as WAV for audio. No plugins, no confusing error messages about needing to install something or other that turns out not to be available on your platform anyway.

Local data storage

Web applications can now use Web Storage's local storage capabilities to store data on your computer. This is great for anything from site preferences to more complex data.

### Security and privacy

Private Browsing

Need to use someone else's computer? Switch on Private Browsing mode and nothing will be recorded about your session, including cookies, history, and any other potentially private information.

Better privacy controls

The Privacy preference pane has been completely redesigned to offer users more control over their private information. Users can choose to retain or discard anything including history information, cookies, downloads, and form field information. In addition, users can specify whether or not to include history and/or bookmarks in the location bar's automated suggestions, so you can keep private web addresses from popping up unexpectedly while typing in the location bar.

### Performance

Faster JavaScript performance

JavaScript, the "J" in "AJAX," is sped up dramatically in Firefox 3.5 with the new TraceMonkey JavaScript engine. Web applications are much faster than in Firefox 3.

Faster page rendering

Web content draws faster in Firefox 3.5, thanks to technologies such as "speculative parsing." Your users don't need to know what it means, other than "it makes things draw faster."

See also
--------

* Firefox 3 for developers
* Firefox 2 for developers
* Firefox 1.5 for developers


Firefox 113 for developers - Mozilla

Firefox 113 for developers
==========================

This article provides information about the changes in Firefox 113 that affect developers. Firefox 113 was released on May 09, 2023.

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

### HTML

No notable changes.

### CSS

* The `color()`, `lab()`, `lch()`, `oklab()`, `oklch()`, and `color-mix()` functional notations are now supported, along with the `forced-color-adjust` property.
 For more information on the functional notations, see the CSS color value documentation.
 (Firefox bug 1352753, Firefox bug 1813497, Firefox bug 1818819, Firefox bug 1824526).
* The `:nth-child of <selector>` syntax allows you to target a group of children based upon the `An+B` rule that also matches a defined selector.
 See (Firefox bug 1808229) for more details.
* The `scripting` media feature is now supported. See (Firefox bug 1166581) for more details.
* The `content` property now supports all image type including, `<gradient>`, `image-set()` and `url()`. See (Firefox bug 1684958) for more details. There is currently an issue with the `::before` and `::after` pseudo selectors that means that they don't paint `<gradient>`s. See (Firefox bug 1832901) for more details.
### JavaScript

No notable changes.

### APIs

* `CanvasRenderingContext2D.reset()` and `OffscreenCanvasRenderingContext2D.reset()` are now supported, and can be used to return the associated rendering context to its default state.
 (Firefox bug 1709347).
* The Compression Streams API is now supported.
 The interfaces provided by this API are used to compress and decompress data using the `gzip` and `deflate` formats (Firefox bug 1823619).
* The deprecated and non-standard `mozImageSmoothingEnabled` property is now disabled.
 See the `imageSmoothingEnabled` property for smoothing in scaled images (Firefox bug 1822955).

#### Media, WebRTC, and Web Audio

* The AV1 video codec is now enabled on Android. Hardware accelerated decoding is used if supported by the device (Firefox bug 1672276).
* The following WebRTC methods, properties, and dictionaries are now supported: `RTCRtpSender.getCapabilities()`, `RTCRtpReceiver.getCapabilities()`, `RTCRtpSender.setStreams()`, `RTCSctpTransport` & `RTCPeerConnection.sctp`, `RTCMediaSourceStats`, `RTCPeerConnection.connectionState`, and `RTCPeerConnectionStats`.
 The corresponding bug reports are, respectively: Firefox bug 1531460, Firefox bug 1531461, Firefox bug 1510802, Firefox bug 1278299, Firefox bug 1804678, Firefox bug 1265827, and Firefox bug 1531087.

#### Removals

* The deprecated and non-standard `CanvasRenderingContext2D.mozTextStyle` attribute was permanently removed. This was previously hidden behind a preference. (Firefox bug 1294362).
* The deprecated and non-standard attributes `mozRTCPeerConnection`, `mozRTCIceCandidate`, and `mozRTCSessionDescription` were permanently removed (Firefox bug 1531812).
### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Added support for serializing `Node` objects within a Shadow DOM and the `shadowRoot` property on `Node` objects (Firefox bug 1802137).
* Added support for cached responses for the `network.responseStarted` and `network.responseCompleted` events (Firefox bug 1806802 and Firefox bug 1806794).
* Fixed an issue where the `browsingContext.domContentLoaded` and `browsingContext.load` events were missing for navigations using `document.open()` and `document.close()` (Firefox bug 1822772).
* Fixed an issue where the `script.callFunction` command was throwing an `invalid argument` error if an unknown object was passed as an argument, instead of the expected `no such handle` error (Firefox bug 1821039).

#### Marionette

* The `moz:useNonSpecCompliantPointerOrigin` capability is now deprecated and will be fully removed in Firefox 116 (Firefox bug 1824911).
* Implemented the `WebDriver:FindElementFromShadowRoot` and `WebDriver:FindElementsFromShadowRoot` commands (Firefox bug 1700095).
* Implemented the `WebDriver:GetComputedLabel` and `WebDriver:GetComputedRole` commands (Firefox bug 1585622).
* Added support for the `background` parameter of the `WebDriver:Print` command (Firefox bug 1783086).
* Added support for the `orientation` parameter of the `WebDriver:Print` command (Firefox bug 1791819).
* Fixed an issue with `DOMTokenList` instances, which are now returned as collections instead of arbitrary objects (Firefox bug 1823464).
Changes for add-on developers
-----------------------------

* When an extension registers multiple listeners for the same event, all the event listeners are called when the event page wakes up, instead of only the first one (Firefox bug 1798655).
* Support is now provided for the `declarativeNetRequest` API (Firefox bug 1782685).
* The `gecko_android` subkey has been added to the `browser_specific_settings` key. This subkey enables an extension to specify the range of Firefox for Android versions it is compatible with (Firefox bug 1824237).
Older versions
--------------

* Firefox 112 for developers
* Firefox 111 for developers
* Firefox 110 for developers
* Firefox 109 for developers
* Firefox 108 for developers
* Firefox 107 for developers
* Firefox 106 for developers
* Firefox 105 for developers
* Firefox 104 for developers
* Firefox 103 for developers
* Firefox 102 for developers
* Firefox 101 for developers
* Firefox 100 for developers
* Firefox 99 for developers
* Firefox 98 for developers
* Firefox 97 for developers
* Firefox 96 for developers
* Firefox 95 for developers
* Firefox 94 for developers
* Firefox 93 for developers
* Firefox 92 for developers
* Firefox 91 for developers
* Firefox 90 for developers
* Firefox 89 for developers
* Firefox 88 for developers
* Firefox 87 for developers
* Firefox 86 for developers
* Firefox 85 for developers
* Firefox 84 for developers
* Firefox 83 for developers
* Firefox 82 for developers


Firefox 59 for developers - Mozilla

Firefox 59 for developers
=========================

This article provides information about the changes in Firefox 59 that will affect developers. Firefox 59 was released on March 13, 2018.

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

### Developer tools

* The Network Monitor Response tab now shows a preview of the rendered HTML — if the response is HTML (Firefox bug 1353319).
* Cookie information shown in the Storage Inspector (see Cookies) now includes a *sameSite* column showing what the same-site status of each cookie is (Firefox bug 1298370).
* The Rulers tool now includes a readout showing the current dimensions of the viewport (Firefox bug 1402633).
* In Responsive Design Mode, you can now set the screen dimensions using the cursor keys (Firefox bug 1421663). See the Setting screen size section for more details.
* The *Raw headers* display in the Network Monitor *Headers* tab now includes the response's status code (Firefox bug 1419401).
### HTML

* The `<textarea>` element's `autocomplete` attribute has been implemented. This lets you enable or disable form auto-fill for the element.
### CSS

* The `overscroll-behavior` property and its associated longhand properties — `overscroll-behavior-x` and `overscroll-behavior-y` — have been implemented (Firefox bug 951793), and it has been enabled by default on all releases (Firefox bug 1428879).
* The behavior of "unusual elements" (elements that aren't rendered purely by CSS box concepts such as replaced elements) when given a `display` value of `contents` has been updated as per spec (Firefox bug 1427292). See Appendix B: Effects of display: contents on Unusual Elements for exactly what the specified behaviors are.
* `position` `sticky` is now supported on appropriate HTML table parts (e.g. `<th>` elements) (Firefox bug 975644).
* `calc()` is now supported in `<color>` values — `rgb()`, `rgba()`, `hsl()`, and `hsla()` (Firefox bug 984021).
* `calc()` in media query values is now supported Firefox bug 1396057.
* The `@document` at-rule has been limited to use only in user and UA sheets (Firefox bug 1035091).
* Implement the `font-optical-sizing` property (Firefox bug 1435692).
### SVG

*No changes.*

### JavaScript

*No changes.*

### APIs

#### New APIs

* `PointerEvents` have been enabled in Firefox Desktop (Firefox bug 1411467).

#### DOM

* The `EventTarget()` constructor has been implemented (Firefox bug 1379688).
* The `Response()` constructor can now accept a `null` value for its `body` parameter, as per spec (Firefox bug 1303025).

#### DOM events

* The `Event.composedPath()` method has been implemented (Firefox bug 1412775).

#### Service workers

* The service worker Clients API can now find and communicate with windows in a separate browser process (Firefox bug 1293277) .
* Nested about:blank and about:srcdoc iframes will now inherit their parent's controlling service worker. Fixed in (Firefox bug 1293277) and (Firefox bug 1426979).
* When a service worker provides a `Response` to `FetchEvent.respondWith()`, the `Response.url` value will now be propagated to the intercepted network request as the final resolved URL. In the past the `FetchEvent.request.url` was used for this instead. This means, for example, if a service worker intercepts a stylesheet or worker script, then the provided `Response.url` will be used to resolve any relative `@import` or `importScripts()` subresource loads (Firefox bug 1222008).
* `FetchEvent.respondWith()` will now trigger a network error if the `FetchEvent.request.mode` is `"same-origin"` and the provided `Response.type` is `"cors"`. (Firefox bug 1222008)

#### Media and WebRTC

* The `MediaStreamTrack` property `MediaStreamTrack.muted`, along with the events `mute` and `unmute` and the corresponding event handlers, `onmute` and `onunmute`, have been implemented. A track's `muted` state indicates that the track is not currently able to provide media data.

**Note:** The `muted` state of a track isn't useful for what's typically thought of as muting and unmuting a track. Instead, use the `enabled` property; setting `enabled` to `false` causes the track to output only empty frames.
* Firefox 59 on Android now supports Apple's HTTPS Live Streaming (HLS) protocol for both audio and video. This non-standard protocol is being supported on mobile to improve compatibility with sites that require it for mobile streaming. There is not currently any plan to implement it on Firefox Desktop.
* The `RTCRtpReceiver` methods `getContributingSources()` and `getSynchronizationSources()` have been implemented to provide information about the sources of each RTP stream. However, a specification change occurred before release and we have disabled these by default behind the preference `media.peerconnection.rtpsourcesapi.enable` (Firefox bug 1363667, Firefox bug 1430213, and Firefox bug 1433236.
* The `RTCRtpTransceiver` interface has now been implemented, since the Firefox implementation of WebRTC now supports transceivers, with `RTCPeerConnection` and other interfaces updated to use them per the latest specification.
* The `RTCPeerConnection.addTransceiver()` method has been added. In addition, the behavior of `addTrack()` has been updated to create a transceiver as required.
* Support for WebVTT regions was implemented in Firefox 58 but disabled by default. They're now available by default (Firefox bug 1415805).
* Firefox now supports WebVTT `REGION` definition blocks whose settings list has one setting per line instead of all of the settings being on the same line of the WebVTT file (Firefox bug 1415821.

#### Canvas and WebGL

*No changes.*

### CSSOM

The `CSSNamespaceRule` interface and its `namespaceURL` and `prefix` properties have been implemented (Firefox bug 1326514).

### HTTP

*No changes.*

### Security

* Top-level navigation to `data:` URLs has been blocked Firefox bug 1401895. See Blocking Top-Level Navigations to data URLs for Firefox 59 for more details.
* The `SAMEORIGIN` directive of the `X-Frame-Options` header has been changed so that it checks not only the top-level IFrame is in the same origin, but all its ancestors as well (Firefox bug 725490).
* Image resources loaded from different origins to the current document are no longer able to trigger HTTP authentication dialogs (Firefox bug 1423146).
* HTTP authentication now uses `utf-8` encoding for usernames and passwords (rather than `ISO-8859-1`) for parity with other browsers, and to avoid potential problems as described in Firefox bug 1419658.
* Everyday the HSTS preload list is updated from Google. Normally this doesn't warrant a note, but in this release new TLDs were included, notably `.app` and `.dev`. While they are new TLDs developers might have used them for local development and be surprised by this change. Note that reserved TLDs should be used for local development instead.
### Plugins

*No changes.*

### Other

*No changes.*

Removals from the web platform
------------------------------

### HTML

The non-standard `version` parameter of the `<script>` element's `type` attribute (e.g. `type="application/javascript;version=1.8"`) has been removed (Firefox bug 1428745).

### CSS

* The proprietary `mozmm` `<length>` unit has been removed (Firefox bug 1416564).
* The proprietary `-moz-border-top-colors`, `-moz-border-right-colors`, `-moz-border-bottom-colors`, and `-moz-border-left-colors` properties have been limited to usage in chrome code only (Firefox bug 1417200).
### JavaScript

* Non-standard conditional catch clauses have been removed (Firefox bug 1228841).
### APIs

* The non-standard method `Event.getPreventDefault()` has been removed. You should instead use the `Event.defaultPrevented` property to determine whether or not `preventDefault()` was called on the `Event`.
* The proprietary `Navigator.mozNotification` property and `DesktopNotification` interface have been removed, in favor of the standard Notifications API (Firefox bug 952453).
* The proprietary `window.external.addSearchEngine()` method has been removed (Firefox bug 862147). Also see `Window.sidebar` for more details.
* The non-standard Firefox-only `HTMLMediaElement` property `mozAutoplayEnabled` has been removed.
### SVG

Support for SMIL's `accessKey` feature has been removed (Firefox bug 1423098).

### Other

Support for the non-standard `pcast:` and `feed:` protocols has been removed from Firefox (Firefox bug 1420622).

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

### WebExtensions

* Theme updates:
    + new properties: `colors.background_tab_text`, `colors.toolbar_field_border`
    + all color properties now support both Chrome-style arrays and CSS color values.
* New browser settings:
    + `contextMenuShowEvent`
    + `openBookmarksInNewTabs`
    + `openSearchResultsInNewTabs`
    + `proxyConfig`
* New `tabs` APIs:
    + `tabs.captureTab()`
    + `tabs.hide()`
    + `tabs.show()`
* The `contextMenus` API now supports a "bookmark" context.
* New `contentScripts` API enables runtime registration of content scripts.
* New `pageAction`, `browserAction`, `SidebarAction` APIs:
    + `browserAction/pageAction/sidebarAction.set*` functions now accept `null` to undo changes.
    + `browserAction.isEnabled()`, `pageAction.isShown()`, `sidebarAction.isOpen()` functions.
* New option in `page_action` to show page actions by default.
* New values for `protocol_handlers`:
    + "ssb" for Secure Scuttlebutt communications
    + "dat" for DATproject
    + "ipfs", "ipns", "dweb" for IPFS
* New `privacy.websites` setting "cookieConfig".
* Support in `cookies` API for first-party isolation.
* New option `upgradeToSecure` in `webRequest`.
Older versions
--------------

* 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 30 for developers
* Firefox 29 for developers
* Firefox 28 for developers