Firefox 19 for developers
=========================

Firefox 19 was released on February 19, 2013. 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
--------------------------

### JavaScript

* `Map` and `Set` objects have changed from having a `size()` method to a `size` property (Firefox bug 807001)
* `Map` and `Set` objects also have a clear() method now. (Firefox bug 805003)
### CSS

* Support for the viewport-relative `<length>` units, `vh`, `vw`, `vmin`, and `vmax`, has landed (Firefox bug 503720)
* CSS Flexbox has been unprefixed, but remains disabled by default (Firefox bug 801098).
* The `-moz-initial` value has been unprefixed (Firefox bug 806068). `-moz-initial` will be kept for a while as an alias; however, authors are strongly encouraged to switch over to `initial`.
* The CSS `text-transform` property now supports the `full-width` keyword, which allows a more seamless inclusion of Latin characters in text using ideographic fixed-width characters, like Chinese or Japanese (Firefox bug 774560).
* The CSS `page-break-inside` has been implemented (Firefox bug 685012).
* The CSS `calc()` function can now be used on `<color-stop>` (on `<gradient>`).
* The CSS `@page` at-rule is now supported (Firefox bug 115199). Note that the pseudo-classes `:first`, `:right`, and `:left` are not yet implemented.
* The `:-moz-placeholder` pseudo-class is replaced by the `::-moz-placeholder` pseudo-*element* (Firefox bug 737786).
* Declarations qualified with `!important` appearing in `@keyframes` are now ignored, per spec (Firefox bug 784466).
### DOM/APIs

* The `Element.getElementsByTagName`, `Element.getElementsByTagNameNS` and `Element.getElementsByClassName` methods now return a live `HTMLCollection` (Firefox bug 799464).
* The `File` `mozLastModifiedDate` property has been implemented. (Firefox bug 793955)
* The `File` lastModifiedDate property returns the current date, when the date of the last modification is unknown. (Firefox bug 793459)
* The `CanvasRenderingContext2D` `isPointInStroke` method has been implemented (Firefox bug 803124).
* The `HTMLCanvasElement` `toBlob` method has been implemented (Firefox bug 648610).
* The `Node.isSupported` and the `document.implementation.hasFeature()` methods have been changed to always return `true` (Firefox bug 801425).
* When calling `document.createElement(null)`, `null` will now be stringified and works like `document.createElement("null")`.
* The `TextDecoder` and `TextEncoder` interfaces have been updated to match the latest spec (Firefox bug 801487).
### XForms

Support for XForms has been **removed** in Firefox 19.

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

**Note:** A key change in Firefox 19 is that `nsresult` is now strongly typed. This will help make it easier to detect bugs that are caused by mishandling of return values, but may cause existing code to break if it's making incorrect assumptions in this regard.

* `getBrowserSelection()` now returns the selected text in a text input field. As a result, `gContextMenu.isTextSelected` will be `true` when the user selects text in a text input field that is not a password field. (Firefox bug 565717)
* Dict.jsm: `Dict()` now takes a JSON String. `Dict.toJSON()` was added, and it returns a JSON String. (Firefox bug 727967)
### Interface changes

`nsIImgLoadingContent`

The parameter (aObserver) of `addObserver()` method changes from `imgIDecoderObserver` to `imgINotificationObserver`. The `notify()` method of `imgINotificationObserver` is not scriptable, so you need to use `createScriptedObserver()` from `imgITools`.

`nsIChannel`

The property `contentLength` changed from `long` to `int64_t`.

See also
--------

* Firefox 19 Beta Release Notes
* Add-on Compatibility for Firefox 19
### Older versions

* 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