Firefox 38 for developers
=========================

Firefox 38 was released on May 12th, 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:

* Bypass audio nodes in Web Audio Editor
* "copy" command in Web Console
* Highlight and filter XmlHttpRequests in Web Console
* See optimized-out variables in the Debugger
* See security warnings in the Network Monitor
* See transferred sizes in the Network Monitor
* Play/pause all animations in the page

All devtools bugs fixed between Firefox 37 and Firefox 38.

### CSS

* Support for `ruby-position` and `ruby-align` have been added and is available by default (Firefox bug 1055676 Firefox bug 1123917 and Firefox bug 1039006).
* The `:unresolved` pseudo-class has been implemented for custom elements (Firefox bug 1111633).
* The predefined style `ethiopic-numeric` now uses a space, instead of a dot, as the suffix to match a recent change to the spec (Firefox bug 1120721).
* CSS transitions on generated content (with `::before` and `::after`) on both an inline and the block that splits them now start as expected by the specification (Firefox bug 1110277).
* The implementation of CSS Logical Properties made big progress. The following properties are available behind the `layout.css.vertical-text.enabled` flag (`false` by default):
    + Direction-independent equivalents of `width` and `height`: `block-size` and `inline-size` (Firefox bug 1117983).
    + Direction-independent equivalents of `min-width` and `min-height`: `min-block-size` and `min-inline-size` (Firefox bug 1117983).
    + Direction-independent equivalents of `max-width` and `max-height`: `max-block-size` and `max-block-size` (Firefox bug 1117983).
    + Direction-independent equivalents of `margin-top`, `margin-right`, `margin-bottom` and `margin-left`: `margin-block-start`, `margin-block-end`, `margin-inline-start` and `margin-inline-end` (Firefox bug 649142).
    + Direction-independent equivalents of `padding-top`, `padding-right`, `padding-bottom` and `padding-left`: `padding-block-start`, `padding-block-end`, `padding-inline-start` and `padding-inline-end` (Firefox bug 649142).
    + Direction-independent equivalents of `border-top`, `border-right`, `border-bottom` and `border-left` and their longhands for width, style and color: `border-block-start`, `border-block-start-width`, `border-block-start-style`, `border-block-start-color`, `border-block-end`, `border-block-end-width`, `border-block-end-style`, `border-block-end-color`, `border-inline-start`, `border-inline-start-width`, `border-inline-start-style`, `border-inline-start-color`, `border-inline-end`, `border-inline-end-width`, `border-inline-end-style` and `border-inline-end-color` (Firefox bug 649142).
    + Direction-independent equivalents of `top`, `right`, `bottom` and `left`: `inset-block-start`, `offset-block-end`, `offset-inline-start` and `offset-inline-end` (Firefox bug 1120283).
* How CSS transitions start has been modified to match a recent change of the specifications, aiming at having an interoperable behavior between browsers (Firefox bug 960465).
### HTML

* The `<label>` element no longer dispatches events to the label target element if interactive content is found between the event target and the label (Firefox bug 229925).
* The `<picture>` element has been activated by default (Firefox bug 1017875).
* The `<meta name="referrer">` is supported for navigations from the context menu or via a middle-click (Firefox bug 1113431).
### JavaScript

* `Generator.prototype.return()` is implemented (Firefox bug 1115868).
* `Setter` with a rest parameter is now a `SyntaxError` (Firefox bug 1089632).
* The `name` property of functions is configurable now (Firefox bug 1084019).
* Several `Array` methods have been implemented for typed arrays as well:
    + The `of()` and `from()` methods (Firefox bug 896608).
    + The `forEach()` method (Firefox bug 1107645).
    + The `filter()` and `map()` methods (Firefox bug 1121936).
    + The `slice()` method (Firefox bug 1121935).
* Duplicated parameter name is no longer allowed when rest-parameter is present (Firefox bug 1096376).
* Duplicated parameter name is no longer allowed in arrow functions (Firefox bug 1096377).
* Duplicated parameter name is no longer allowed in concise method definitions (Firefox bug 1096378).
* Warning is shown when `Map`/`Set`/`WeakMap` constructor is called without `new` (Firefox bug 1108930).
* The `get`, `has`, and `delete` methods of `WeakMap` objects no longer throw when the `key` parameter is not an object (Firefox bug 1127827).
* The optional and non-standard second `fallback` parameter for `WeakMap.prototype.get()` has been removed (Firefox bug 1127827).
* When defining a generator method, "`set`" and "`get`" are no longer invalid names (Firefox bug 1073809).
* `RegExp.prototype.source` now returns "(?:)" instead of an empty string for empty regular expressions (Firefox bug 1130798).
* `RegExp.prototype.source` and `RegExp.prototype.toString()` now escape regular expression patterns properly (e.g. line terminators, "\n") (Firefox bug 1130860).
* The `Regexp` `global`, `ignoreCase`, `multiline`, and `sticky` properties are now prototype accessor properties rather than own data properties of `RegExp` instances (Firefox bug 1120169).
* The `RegExp.prototype.source` property is now prototype accessor property rather than own data property of `RegExp` instances (Firefox bug 1120169). Available only in non-Release version, due to Firefox bug 1150297.
* `Function.prototype.toString()` now throws for `Proxy` objects (Firefox bug 1100936).
### Interfaces/APIs/DOM

* The Fetch API `fetch()` method has been implemented (Firefox bug 1039846).
* `BroadcastChannel` API has been implemented and is available in Web Workers (Firefox bug 966439 and Firefox bug 1121420).
* The Console API is now available in Web Workers.
* `CanvasRenderingContext2D.clearHitRegions()` has been implemented (Firefox bug 1119527).
* Constants of `KeyboardEvent.location`, `DOM_KEY_LOCATION_MOBILE` and DOM\_KEY\_LOCATION\_JOYSTICK, have been removed, since they were removed from the DOM Level 3 Spec (Firefox bug 936313.
* `KeyboardEvent.code` is now available; previously it was only available in prerelease builds. (Firefox bug 1126673)
* `KeyboardEvent.code` now supports special keys on Sun keyboards on Linux, Android, and Firefox OS. (Firefox bug 1020139)
* The `TextEncoder()` constructor has been changed to match the spec: when an invalid parameter is passed, the `RangeError` `DOMException` is now raised, rather than the erroneous `TypeError` (Firefox bug 1125766).
* The User Timing API, adding `Performance.mark()`, `Performance.clearMarks()`, `Performance.measure()`, and `Performance.clearMeasures()` has been implemented (Firefox bug 782751).
* The prefixed version of `indexedDB`, `mozIndexedDB` has been removed (Firefox bug 975699).
* The `DOMContentLoaded` event is no longer cancelable (Firefox bug 1134559).
* You can now use WebSockets in Workers (Firefox bug 504553).
* The `XMLHttpRequest.responseType` and `XMLHttpRequest.withCredentials` properties can now be set before calling `XMLHttpRequest.open()` (Firefox bug 707484).
### MathML

*No change.*

### SVG

*No change.*

### Audio/Video

*No change.*

Networking
----------

*No change.*

Security
--------

* In Firefox, the `autocomplete``=false` attribute is now ignored when dealing with a login form (Firefox bug 1025703). This is intended to encourage the use of more secure passwords by allowing password manager tools to work more reliably.
* RC4 is now disabled when using TLS, except for a few specifically allowed websites. This whitelist is an interim measure until those sites are fixed (Firefox bug 1124039). This fallback is controlled by the `security.tls.unrestricted_rc4_fallback` preference, `true` by default for the moment (Firefox bug 1138882).
* Websites needing to fall back to an insecure version of TLS in order to work are now in a hardcoded whitelist which will shrink over time (Firefox bug 1114816). The whitelist can be disabled by setting `security.tls.insecure_fallback_hosts.use_static_list` to `false`.
Changes for add-on and Mozilla developers
-----------------------------------------

### Add-on SDK

#### Highlights

* `sdk/context-menu@2` was implemented (Firefox bug 1070952).
* `sdk/addon/bootstrap` was implemented (Firefox bug 1075541).
* `sdk/windows/loader` was removed (Firefox bug 970135).
* Fix for default language detection on Linux (Firefox bug 1114712).
* `toolkit/loader` now has opt-in module compatibility checking, which is enabled for all jpm add-ons (Firefox bug 1037235).

#### Electrolysis (E10s) updates

* `sdk/page-worker` e10s updates (Firefox bug 1116004).
* `sdk/content/worker` e10s updates (Firefox bug 1116544).
* `sdk/tabs` e10s updates (Firefox bug 1033838).

#### Details

* GitHub commits made between Firefox 37 and Firefox 38.
### XUL

*No change.*

### JavaScript code modules

#### Downloads.jsm

* `DownloadTarget` objects now have `exists` and `size` properties, allowing you to determine the existence of and the size of the download's target file on disk, as well as a new `refresh()` method, which asks that these values be updated.
### XPCOM

* `"@mozilla.org/network/atomic-file-output-stream;1"` and `"@mozilla.org/network/safe-file-output-stream;1"` now throw an exception if `PR_APPEND` is passed without `PR_TRUNCATE` (Firefox bug 1117580).
* `nsICompositionStringSynthesizer` and `nsIDOMWindowUtils.sendCompositionEvent()` have been removed. Instead, use `nsITextInputProcessor`. (Firefox bug 917322)
* `nsIDOMWindowUtils.sendKeyEvent()` is now deprecated. Instead, use `nsITextInputProcessor` (Firefox bug 1119609).
Older versions
--------------

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