Firefox 36 for developers
=========================

Firefox 36 was released on February 24th, 2015. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.

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

### Developer Tools

Highlights:

* eval sources now appear in the Debugger
* Simpler process for connecting to Firefox for Android
* Box Model Highlighter works on remote targets
* "Invert the call tree" option in the Profiler
* Inspect DOM promises in the console
* Extra "Paste" commands in the Inspector

All devtools bugs fixed between Firefox 35 and Firefox 36.

### CSS

* The `will-change` property has been enabled by default (Firefox bug 961871).
* The `white-space` property is now working on `<textarea>` HTML elements (Firefox bug 82711).
* The `unicode-range` descriptor is now supported by `@font-face` (Firefox bug 475891), but not enabled by default.
* The properties `text-decoration-color`, `text-decoration-line`, and `text-decoration-style` are unprefixed (Firefox bug 825004). The prefixed version are still available for some time to ease transition (Firefox bug 1097922).
* The `text-decoration` property is turned into shorthand property (Firefox bug 1039488).
* The properties `object-fit` and `object-position` are now supported (Firefox bug 624647)
* The `contents` value of the `display` property has been experimentally implemented. It is preffed off by default (Firefox bug 907396).
* In Quirks mode, the `:active` and `:hover` quiver quirk has been altered to be applied less often: it is now used only on links, only if there are no pseudo-element or other pseudo-class in the element and if it isn't part of a pseudo-class element (Firefox bug 783213).
* The `isolation` property has been implemented (Firefox bug 1077872).
* CSS `<gradient>` now applies on the premultiplied colors, matching the spec and other browsers, and getting rid of unexpected gray colors appearing in them (Firefox bug 591600).
* Interpolation hint syntax has been added to `<gradient>` (Firefox bug 1074056).
* The `scroll-behavior` property has been implemented (Firefox bug 1010538).
### HTML

* Support for `<meta name="referrer">` has been added (Firefox bug 704320).
* In Firefox, `<input>` filters specified in the `accept` attribute will always be selected by default, unless there is an unknown value, that is an unknown mime type or badly formatted value in the `accept` attribute. Previously specified filters were only selected by default for `image/*`, `video/*` and `audio/*` values (Firefox bug 826185).
### JavaScript

* The ECMAScript 2015 Symbol data type has been enabled by default (was available in the Nightly channel since version 33) (Firefox bug 1066322):
    + `Symbol`
    + `Symbol.for()`
    + `Symbol.keyFor()`
    + `Object.getOwnPropertySymbols()`
* The old placeholder string `"@@iterator"` has been replaced with the real ES2015 well-known symbol `Symbol.iterator` for the iterable interface property key (Firefox bug 918828).
* The spec-internal abstract operation `ToNumber(string)` now supports binary (`0b`) and octal (`0o`) literals, this is a potentially breaking change from ES5 (Firefox bug 1079120).
    + `Number("0b11")` now returns `3`, not `NaN`.
    + `"0o11" == 9` now returns `true`, not `false`.
* The `const` declaration is now block-scoped and requires an initializer (Firefox bug 611388). It also can not be redeclared anymore (Firefox bug 1095439).
    + `{const a=1}; a;` now throws a `ReferenceError` and does not return `1` anymore due to block-scoping.
    + `const a;` now throws a `SyntaxError` ("missing = in const declaration`"`): An initializer is required.
    + `const a = 1; a = 2;` now also throws a `SyntaxError` ("invalid assignment to const a").
* The ES2016 method `Array.prototype.includes` has been implemented, but for now, it is only enabled in Nightly builds (Firefox bug 1069063).
* The `delete` operator now triggers the "temporal dead zone" when using with `let` and `const` (Firefox bug 1074571).
* The non-standard `let` blocks and `let` expressions are deprecated and will now log a warning in the console. Do not use them anymore, they will be removed in the future.
* WeakMap constructor now handles optional iterable argument (Firefox bug 1092537).
### Interfaces/APIs/DOM

* The `CanvasRenderingContext2D.resetTransform()` method of the Canvas API has been implemented (Firefox bug 1099148).
* ECDSA is now supported in the Web Crypto API (Firefox bug 1034854).
* Our experimental implementation of WebGL 2.0 is going forward!
    + The `WebGLQuery` interface is available (Firefox bug 1048719).
    + The `WebGL2RenderingContext.invalidateFrameBuffer()` method has been implemented (Firefox bug 1076456).
* The `MediaDevices` interface, containing the `Promise`-based version of `getUserMedia()`, has been added. It is available via `Navigator.mediaDevices` (Firefox bug 1033885).
* The EME-related `Navigator.requestMediaKeySystemAccess()` method, and the related `MediaKeySystemAccess`, is now supported (Firefox bug 1095257).
* The `keyschange` event is now sent when an EME-related CDM change keys in a session (Firefox bug 1081755).
* The default values of the options for `MutationObserver.observe()` have been updated to match the latest specification (Firefox bug 973638).
* Experimental support for virtual reality devices has landed behind the `dom.vr.enabled` preference, off by default (Firefox bug 1036604).
* The function associated with `RTCPeerConnection.onsignalingstatechange` now receives an event as parameter, as per spec (Firefox bug 1075133).
* The experimental implementation of Web Animations make progress: the method `AnimationPlayer.play()` and `AnimationPlayer.pause()` are now supported (Firefox bug 1070745), as well as `AnimationPlayer.playState` (Firefox bug 1037321).
* The non-standard `DOMRequest` interface has now a `DOMRequest.then()` method (Firefox bug 839838).
* The CSSOM View scroll behavior controlling methods, `Element.scroll()`, `Element.scrollTo()`, `Element.scrollBy()`, and `Element.scrollIntoView()`, have been implemented or extended (Firefox bug 1045754 and Firefox bug 1087559).
* Assigning to `Element.innerHTML` on an `SVGElement` now create elements in the SVG namespace (Firefox bug 886390).
* The `nsIWebBrowserPersist.saveURI()` method now requires 8 arguments, in an order incompatible with previous releases.
* Support for Media Source Extensions (MSE) is activated by default in non-build releases (Nightly and Developer Edition only) (Firefox bug 1000686). It keeps being preffed off on Beta and Release version.
### MathML

*No change.*

### SVG

*No change.*

### Audio/Video

*No change.*

Networking
----------

* Support for SPDY/3 has been removed; support for SPDY/3.1 is still available (Firefox bug 1097944).
Security
--------

* RC4 is now considered as insecure and all UI indicators will react as such; SSLv3 has been disabled by default in Firefox 34, but the UI has been changed to help the user better understand what is happening (Firefox bug 1093595).
* Also, RC4 is no longer offered in the initial handshake of TLS (Firefox bug 1088915).
* The `form-action` directive of CSP 1.1 is now supported (Firefox bug 529697).
* In the preferences of Firefox, The Do not track selection widget is again an on/off switch (Firefox bug 1071747).
Changes for add-on and Mozilla developers
-----------------------------------------

### Add-on SDK

#### Highlights

* The `sdk/test/httpd` module was removed, use the addon-httpd npm module instead.
* Add badges to `sdk/ui` buttons (Firefox bug 994280).
* Implemented global `require` function to access sdk modules anywhere (Firefox bug 1070927), using:

```js
var { require } = Cu.import(
  "resource://gre/modules/commonjs/toolkit/require.js",
  {},
);
```


#### Details

GitHub commits made between Firefox 35 and Firefox 36.

### JavaScript code modules

* `PromiseUtils.resolveOrTimeout` is implemented (Firefox bug 1080466).
* `PromiseUtils.defer` (a replacement for `Promise.defer()`) is implemented (Firefox bug 1093021).
### Interfaces

#### nsIContentPolicy

New constants have been added to `nsIContentPolicy` to allow Gecko internals and add-on code to better differentiate different types of requests. These are:

`TYPE_FETCH`

Indicates a content load request initiated by the `fetch()` method.

`TYPE_IMAGESET`

Indicates a request to load an `<img>` (with the `srcset` attribute or `<picture>` element.

### XUL

*No change.*

### Other

* Firefox `-remote` command line option has been removed (Firefox bug 1080319).
Older versions
--------------

* Firefox 35 for developers
* Firefox 34 for developers
* Firefox 33 for developers
* Firefox 32 for developers
* Firefox 31 for developers
* Firefox 30 for developers
* Firefox 29 for developers
* Firefox 28 for developers
* Firefox 27 for developers
* Firefox 26 for developers
* Firefox 25 for developers
* Firefox 24 for developers
* Firefox 23 for developers
* Firefox 22 for developers
* Firefox 21 for developers
* Firefox 20 for developers
* Firefox 19 for developers
* Firefox 18 for developers
* Firefox 17 for developers
* Firefox 16 for developers
* Firefox 15 for developers
* Firefox 14 for developers
* Firefox 13 for developers
* Firefox 12 for developers
* Firefox 11 for developers
* Firefox 10 for developers
* Firefox 9 for developers
* Firefox 8 for developers
* Firefox 7 for developers
* Firefox 6 for developers
* Firefox 5 for developers