Firefox 40 for developers
=========================

To test the latest developer features of Firefox, install Firefox Developer Edition Firefox 40 was released on August 11, 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:

* Improvements to the Animations view
* Get help from MDN for CSS property syntax
* Edit filters in the Page Inspector
* Web Console now shows messages from workers
* Filter requests by URL in the Network Monitor
* Many new context menu options in the Network Monitor
* Show when network resources are fetched from the browser cache
* Filter rules in the Page Inspector

More:

* Break at debugger; statements in unnamed eval sources
* Copy URL/Open in New Tab context menu items for Debugger source list pane
* console.dirxml support in the Web Console
* Style Editor: "Open Link In New Tab" item added to stylesheet list
* Inspector selector search now includes class/id results even without css prefix
* Tooltips in box-model view saying which CSS rule caused the value
* Switch between color unit format in the Inspector using Shift+click
* Implement "Scroll Into View" menu item for the Inspector
* Linkify url/id/resource attributes in the Inspector
* IP address tooltip in the Network Monitor

Everything: all devtools bugs fixed between Firefox 39 and Firefox 40.

### CSS

* Prefixed rules (`-moz-`) for `text-decoration-color`, `text-decoration-line`, and `text-decoration-style` have been removed (Firefox bug 1097922).
* The property `text-align` now supports the `match-parent` value (Firefox bug 645642).
* In Quirks Mode, `empty-cells` now defaults to `show`, like in standard mode (Firefox bug 1020400).
* The `-moz-orient` non-standard property, used to style `<meter>` and `<progress>` element has been adapted for vertical writing-modes: the value `auto` has been dropped and the values `inline` and `block` added, with `inline` being the new default value (Firefox bug 1028716).
* The property `font-size-adjust` has been fixed so that `0` is treated as a multiplier (leading to a `0` height for the font, hence hiding it) instead of the `none` value (leading to no adjustment, or a `1.0` value) (Firefox bug 1144885).
* Fix text-overflow doesn't work in vertical writing mode (Firefox bug 1117227).
### HTML

*No change.*

### JavaScript

* Unreachable code after `return` statement (including unreachable expression after semicolon-less return statements) will now show a warning in the console (Firefox bug 1005110, Firefox bug 1151931).
* `Symbol.match` has been added (Firefox bug 1054755).
* Passing an object which has a property named `Symbol.match` with a truthy value to `String.prototype.startsWith`, `String.prototype.endsWith`, and `String.prototype.contains` now throws a `TypeError` (Firefox bug 1054755).
* `RegExp` function returns pattern itself if called without `new` and pattern object has a property named `Symbol.match` with a truthy value, and the pattern object's `constructor` property equals to `RegExp` function. (Firefox bug 1147817).
* Support for the non-standard JS1.7 destructuring for-in has been dropped (Firefox bug 1083498).
* Non-standard initializer expressions in `for...in` loops are now ignored and will present a warning in the console. (Firefox bug 748550 and Firefox bug 1164741).
* `\u{xxxxxx}` Unicode code point escapes have been added (Firefox bug 320500).
* `String.prototype.contains` has been replaced with `String.prototype.includes`, `String.prototype.contains` is kept as an alias (Firefox bug 1102219).
* If the `DataView` constructor is called as a function without the `new` operator, a `TypeError` is now thrown as per the ES2015 specification.
* An issue regressed in Firefox 21, where proxyfied arrays without the `get` trap were not working properly, has been fixed. If the `get` trap in a `Proxy` was not defined, `Array.length` returned `0` and the `set` trap didn't get called. A workaround was to add the `get` trap even if was not necessary in your code. This issue has been fixed now (Firefox bug 895223).
* `WeakMap.prototype` and `WeakSet.prototype` have been updated to be just ordinary objects, per ES2015 specification (Firefox bug 1055473).
### Interfaces/APIs/DOM

#### New APIs

* The Push API has been experimentally implemented (Firefox bug 1038811). Controlled by the `services.push.enabled` pref, it is disabled by default.

#### Web Animations API

Improvement in our experimental Web Animations implementation, mostly to match latest spec changes:

* `AnimationPlayer.currentTime` now can also be set (Firefox bug 1072037).
* `Animatable.getAnimationPlayers()`, available on `Element` has been renamed to `Element.getAnimations()` (Firefox bug 1145246).
* `Animation` and `AnimationEffect` have been merged into the newly created `KeyframeEffectReadOnly` (Firefox bug 1153734).
* `AnimationPlayer` has been renamed to `Animation` (Firefox bug 1154615).
* `AnimationTimeline` is now an abstract class, with `DocumentTimeline` its only implementation (Firefox bug 1152171).

#### CSSOM

* The CSS Font Loading API is now enabled by default in Nightly and Developer Edition releases (Firefox bug 1088437). It is still deactivated by default in Beta and Release browsers.
* The `CSSCharsetRule` interface has been removed and such objects are no longer available in CSSOM (Firefox bug 1148694). This matches the spec (recently adapted) and Chrome behavior.

#### WebRTC

* WebRTC: the `negotiationneeded` event is now also sent for initial negotiations, not only for re-negotiations (Firefox bug 1149838).

#### DOM & HTML DOM

* When unable to parse the `srcset`, the `HTMLImageElement.currentSrc` method doesn't return `null` anymore but `""`, as requested by the latest specification (Firefox bug 1139560).
* Like for images, Firefox now throttles `Window.requestAnimationFrame()` for non-visible `<iframe>` (Firefox bug 1145439).
* `Navigator.taintEnabled` is no longer available for Web workers (Firefox bug 1154878).

#### Web Audio API

New extensions to the Web Audio API:

* The `AudioContext.state` and `AudioContext.onstatechange` properties as well as the methods `AudioContext.suspend()`, `AudioContext.resume()`, and `AudioContext.close()` have been added (Firefox bug 1094764).
* `AudioBufferSourceNode` now implements the `AudioBufferSourceNode.detune` k-rate attribute (Firefox bug 1153783).

#### Web Workers

* Slight improvement in our Service Worker API: the `update()` method has been moved from `ServiceWorkerGlobalScope` to `ServiceWorkerRegistration` (Firefox bug 1131350).
* `ServiceWorkerRegistration` is now available in Web workers (Firefox bug 1131327).
* `DataStore` is now available in Web workers (Firefox bug 916196).

#### IndexedDB

* `IDBTransaction` are now non-durable by default (Firefox bug 1112702). This favors performance over reliability and matches what other browsers are doing. For more information, read our durability definition.

#### Dev Tools

* The property `console.timeStamp()` has been added (Firefox bug 922221).
### MathML

*No change.*

### SVG

*No change.*

### Audio/Video

*No change.*

Networking
----------

*No change.*

Security
--------

* Using an asterisk (`*`) in a CSP does not include the schemes `data:`, `blob:` or `:filesystem` anymore when matching source expressions. So those schemes now need to be explicitly defined within the related header to match the CSP (Firefox bug 1086999).
Changes for add-on and Mozilla developers
-----------------------------------------

### XUL

* It is no longer possible to create transparent top-level windows Firefox bug 1162649.
### JavaScript code modules

* Dict.jsm has been removed Firefox bug 1123309. Use `Map` instead.
### XPCOM

* The `nsIClassInfo.implementationLanguage` attribute has been removed, along with the `nsClassInfo::GetImplementationLanguage()` function.
* The following XPCOM interfaces have been removed; you should use the standard HTML interfaces instead:
    + `nsIDOMHTMLBRElement`
    + `nsIDOMDivElement`
    + `nsIDOMHTMLHeadingElement`
    + `nsIDOMHTMLTableCaptionElement`
    + `nsIDOMHTMLTableElement`
    + `nsIDOMHTMLTitleElement`
### Other

* Places Keywords API has been deprecated and will be removed soon (Firefox bug 1140395).
* The automated testing system now supports skipping individual test functions. See running conditional tests in XPCShell testing.
Older versions
--------------

* Firefox 39 for developers
* Firefox 38 for developers
* Firefox 37 for developers
* Firefox 36 for developers
* Firefox 35 for developers
* Firefox 34 for developers
* Firefox 33 for developers
* Firefox 32 for developers
* Firefox 31 for developers
* Firefox 30 for developers
* Firefox 29 for developers
* Firefox 28 for developers
* Firefox 27 for developers
* Firefox 26 for developers
* Firefox 25 for developers
* Firefox 24 for developers
* Firefox 23 for developers
* Firefox 22 for developers
* Firefox 21 for developers
* Firefox 20 for developers
* Firefox 19 for developers
* Firefox 18 for developers
* Firefox 17 for developers
* Firefox 16 for developers
* Firefox 15 for developers
* Firefox 14 for developers
* Firefox 13 for developers
* Firefox 12 for developers
* Firefox 11 for developers
* Firefox 10 for developers
* Firefox 9 for developers