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