Firefox 64 for developers - Mozilla

Firefox 64 for developers
=========================

This article provides information about the changes in Firefox 64 that will affect developers. Firefox 64 was released on December 11, 2018.

Changes for web developers
--------------------------

### Developer tools

* The Accessibility info-bar has been enhanced to include information about the color contrast ratio of text or images on the page (Firefox bug 1473037).
* Responsive Design Mode device selection is now saved between sessions (Firefox bug 1248619).
* Resources that are potentially affected by Tracking Protection are now indicated in the Network Monitor (Firefox bug 1333994).
* The Web Console got improvements around entering and evaluating code:
    + Autocomplete for Console expressions is now case-insensitive (Firefox bug 672733).
    + You can now step through the Console expression history with bash-like reverse search (Firefox bug 1024913).
    + Evaluated code in the Console is now syntax-highlighted in both the input and output (Firefox bug 1463669).
* Stepping in the JavaScript Debugger also had some improvements:
    + Stepping out of a function in the Debugger now skips the return value (Firefox bug 923975).

#### Removals

* The Developer Tools GCLI has been removed (Firefox bug 1429421).
### HTML

*No changes.*

### CSS

* CSS Scrollbars spec functionality has been enabled by default (Firefox bug 1492012).
* Interaction Media Features implemented, including `pointer:coarse` (Firefox bug 1035774). For `any-pointer` and `any-hover` implementation, see Firefox bug 1483111.
* The `prefers-reduced-motion` media feature is now supported in Firefox for Android (Firefox bug 1478505).
* CSS `<gradient>` values now support multi-position color stop syntax, e.g. `yellow 25%, yellow 50%` can now be written `yellow 25% 50%` (Firefox bug 1352643).
* The `text-transform` property now accepts the `full-size-kana` value (Firefox bug 1498148).
* Support added for `-webkit-appearance` to alleviate associated web compat issues (Firefox bug 1368555).
* Closely associated with the above update, we've also removed most of the Firefox-specific `-moz-appearance` values (Firefox bug 1496720).
* `display`: `list-item` is now supported on `<legend>` elements (Firefox bug 1486602).
* SVG `path()`s, as usable in `offset-path`, are now animatable (Firefox bug 1486094).
* If a selector chain or group includes a `-webkit-`prefixed pseudo-element, that pseudo-element no longer invalidates it (see Firefox bug 1424106 for the details, and Firefox bug 1486325 for enabling this feature).

#### Removals

* The non-standard `-moz-box` and `-moz-inline-box` `display` values have been hidden from web content (Firefox bug 1496961).
* The non-standard `::-moz-tree` pseudo-element has been hidden from web content (Firefox bug 1496961).
* The `layout.css.filters.enabled` preference has been removed; CSS filters can no longer be disabled (Firefox bug 1408841).
* A previous change — to swap the values of the 2-value `overflow` syntax so block is specified first and inline second (Firefox bug 1481866) — has been reverted (Firefox bug 1492567). See Bug 1481866 comment 14 for why.
### SVG

*No changes.*

### JavaScript

* The TC39 Well-formed JSON.stringify proposal has been implemented, to prevent `JSON.stringify` from returning ill-formed Unicode strings (Firefox bug 1469021).
* Proxied functions can now be passed to `Function.prototype.toString``.call()` (Firefox bug 1440468).
* In the `WebAssembly.Global()` constructor, if no value is specified a typed 0 value is used. This is specified by the `DefaultValue` algorithm (Firefox bug 1490286).
### APIs

#### DOM

* A number of changes related to the Fullscreen API have been implemented:
    + The API has been unprefixed (Firefox bug 1269276).
    + The `Element.requestFullscreen()` and `Document.exitFullscreen()` methods both now return a `Promise`, which is resolved when the mode change is complete (Firefox bug 1188256 and Firefox bug 1491212).
    + Previously, `fullscreenchange` and `fullscreenerror` events were dispatched to the `Document` first, then the `Element`. This has been reversed so that the element gets the event first. This matches the latest specification as well as the behavior of Google Chrome (Firefox bug 1375319).
* The WebVR API (1.1) is now re-enabled in macOS (Firefox bug 1476091).
* `Window.screenLeft` and `Window.screenTop` have been implemented, as aliases of `Window.screenX` and `Window.screenY` (Firefox bug 1498860).
* The `XMLHttpRequest.getAllResponseHeaders()` method now returns header names all in lowercase, as per spec (Firefox bug 1398718).
* The legacy `HTMLAllCollection` interface has been updated as per recent spec updates (Firefox bug 1398354).
* `Navigator.buildID` now returns a fixed timestamp as a privacy measure (Firefox bug 583181).
* The following `Document.execCommand()` UI feature commands have been disabled by default (Firefox bug 1490641:
    + `enableObjectResizing`
    + `enableInlineTableEditing`
    + `enableAbsolutePositionEditor`

#### Service workers

* The `ServiceWorkerContainer.startMessages()` method has been implemented (Firefox bug 1263734).

#### Media, Web Audio, and WebRTC

* The `PannerNode.refDistance`, `PannerNode.maxDistance`, `PannerNode.rolloffFactor`, and `PannerNode.coneOuterGain` properties now correctly throw exceptions when set to values outside their accepted ranges (Firefox bug 1487963).
* `RTCRtpEncodingParameters` settings changed via `RTCRtpSender.setParameters()` used to not update if the changes were made during a call. They will now update live, without renegotiation (Firefox bug 1253499).
* `RTCIceCandidateStats.relayProtocol` has been implemented — this is the standardized version of `RTCIceCandidateStats.mozLocalTransport`, which has now been deprecated (Firefox bug 1435789).
* Automatic Gain Control (AGC) is now enabled by default; this can be changed using the preference `media.getusermedia.agc_enabled` (Firefox bug 1496714).

#### Removals

* The `Window.event` property, added in Firefox 63 to aid with web compat issues, has been put behind a pref (`dom.window.event.enabled`) and disabled by default in release versions for now due to other issues that have been uncovered (Firefox bug 1493869). Note that this was actually done late in the Firefox 63 release cycle, but we are mentioning it here just in case.
* The `LocalMediaStream` interface and its `stop()` method have been removed (Firefox bug 1258143). This method is no longer available with the deprecation of `LocalMediaStream`. See the Stopping a video stream section to learn how to stop an entire stream.
* The `AudioStreamTrack` and `VideoStreamTrack` interfaces have been removed, as both have been deprecated for some time (Firefox bug 1377146). Their functionality has been merged into `MediaStreamTrack`; tracks are now identified by the value of their `kind` property, such as `audio` or `video`.
### Security

* The Symantec CA Distrust plan has been implemented (see Firefox bug 1409257; see also the Mozilla's Plan for Symantec Roots discussion for more details).
* `Referrer-Policy` can now be used to govern resources fetched via stylesheets (Firefox bug 1330487) — see Integration with CSS for more information.
### Plugins

*No changes.*

### WebDriver conformance (Marionette)

#### API changes

* Deprecated command end-points without the `Marionette:`, `L10n:`, or `Addon:` prefix (including `singeTap`) have been removed (Firefox bug 1504478, Firefox bug 1504940).

#### Bug fixes

* Synthesized `Shift` key events by using `WebDriver:PerformActions` didn't result in capitalized letters (Firefox bug 1405370).
* `WebDriver:Navigate` could cause an infinite hang if the tab's underlying content process is changed multiple times during that navigation (Firefox bug 1504807).
* To improve the performance, and to reduce the memory footprint of Firefox the default page to be loaded for a new tab or window is no longer `about:newtab` but `about:blank` (Firefox bug 1506643).
* The content blocking introduction panel, which was shown on various web pages and caused element interactions to fail is disabled by default now (Firefox bug 1488826).
Changes for add-on developers
-----------------------------

### API changes

#### Menus

* A new API, ``menus.overrideContext()``, can be called from the `contextmenu` DOM event to set a custom context menu in extension pages. This API allows extensions to hide all default Firefox menu items in favor of providing a custom context menu UI. This context menu can consist of multiple top-level menu items from the extension, and may optionally include tab or bookmark context menu items from other extensions. See this blog post for more details.
    + ``menus.overrideContext()`` was implemented in (Firefox bug 1280347).
    + The `showDefaults: false` option, which can be used to hide the default context menu options, was implemented in (Firefox bug 1367160).
    + `documentURLPatterns` can now be used to match a `moz-extension://` document URL, even if ``menus.overrideContext()`` is used. This way, it can reliably be used to restrict custom menu items to certain documents (Firefox bug 1498896).
* You can now restrict where context menus can appear in an add-on using the new `viewTypes` property in `menus.create()` and `menus.update()` (Firefox bug 1416839).
* `menus.update()` can now be used to update the icon of an existing menu item (Firefox bug 1414566).
* Extensions can now detect which mouse button was used when a menu item was clicked — this can be found using the new `button` property of `menus.OnClickData` (Firefox bug 1469148).

#### Windows

* The `windows.create()` method now has a new option available — `cookieStoreId` — which specifies the `CookieStoreId` to use for all tabs that were created when the window is opened (Firefox bug 1393570).

#### Privacy

* The `privacy.websites` `cookieConfig` property is an object that can accept a `behavior` property — this property can now take a new value, `reject_trackers`, which instructs the extension to reject tracking cookies (Firefox bug 1493057).

#### devtools.panels API

* The `devtools.panels.elements` `Sidebar.setPage()` method is now supported (Firefox bug 1398734).
### Manifest changes

* The new `pinned` property of the `page_action` manifest key enables extensions to control whether their page actions should be pinned to the location bar on install or not (Firefox bug 1494135).
* In native manifests on Windows, the 32-bit registry view (Wow6432Node) will be checked first for registry keys, followed by the "native" registry view; you should use whichever is appropriate for your application (Firefox bug 1494709).
* The `chrome_settings_overrides` field's `search_provider` object can now include new properties — `suggest_url` and `suggest_url_post_params` (Firefox bug 1486819), and `search_url_post_params`.
See also
--------

* Hacks release post: Firefox 64 Released
Older versions
--------------

* Firefox 63 for developers
* Firefox 62 for developers
* Firefox 61 for developers
* Firefox 60 for developers
* 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 55 for developers - Mozilla

Firefox 55 for developers
=========================

Firefox 55 was released on August 8, 2017. This article lists key changes that are useful for web developers.

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

### Developer Tools

* Added filtering of network requests by column values and other properties (Firefox bug 1041895, Firefox bug 1354508, Firefox bug 1354507) and by using regular expressions (Firefox bug 1354495).
* Made it possible to show and hide columns within the Network Monitor (Firefox bug 862855).
* Added remote IP (Firefox bug 1344523), protocol (Firefox bug 1345489), scheme (Firefox bug 1356867), cookies and set cookies columns (Firefox bug 1356869) to Network Monitor.
* The `SourceMap` HTTP header is now supported (prior versions supported the deprecated `X-SourceMap` header, see Firefox bug 1346936).
### HTML

* Elements on which `contenteditable` has been set to `true` now use `<div>` elements to separate different lines of text, to give Firefox parity with other modern browsers (Firefox bug 1297414). See Differences in markup generation for more details.
* Enable `dom.forms.datetime` by default on Nightly (Firefox bug 1366188).
### CSS

* Exposed the `transform-box` property by default (Firefox bug 1208550).
* Implemented the `frames()` timing function (Firefox bug 1248340).
* Implemented the `text-justify` property (Firefox bug 1343512, Firefox bug 276079).
* [css-grid] `fit-content` unexpectedly reserves space for full clamp size in `repeat()` (Firefox bug 1359060).
* The `float` / `clear` logical values — `inline-start` and `inline-end` — which were previously implemented but preffed off in release channels, are now available in all channels by default (Firefox bug 1253919).
* The `layout.css.variables.enabled` preference has been removed completely meaning that the CSS variables feature is enabled all the time and can no longer be disabled (Firefox bug 1312328).
* Implemented the proprietary `-moz-context-properties` property (Firefox bug 1058040).
* Zero (0) angle value without degree unit is not correctly interpreted in `gradient/linear-gradient()` (Firefox bug 1363292).
* The `::cue` pseudo-element is now supported; it matches on text cues presented within a media element (Firefox bug 1318542).
### SVG

* The `<radialGradient>` `fr` attribute has been implemented (Firefox bug 1240275).
### JavaScript

* The `SharedArrayBuffer` and `Atomics` objects are now enabled by default. See A Taste of JavaScript's New Parallel Primitives for an introduction to JavaScript Shared Memory and Atomics.
* The rest operator (`...`) is now supported in object destructuring and the spread operator (`...`) now works in object literals (Stage 3 ECMAScript proposal: Object Rest/Spread Properties, Firefox bug 1339395).
* Async generator methods are now supported (Firefox bug 1353693).
* The `String.prototype.toLocaleLowerCase()` and `String.prototype.toLocaleUpperCase()` methods now support an optional `locale` parameter to specify a language tag for locale-specific case mappings (Firefox bug 1318403).
* The `Intl.Collator` object now supports the `caseFirst` option (Firefox bug 866473).
* The Intl API now uses the browser's default locale instead of the operating system's default locale when no locale setting is provided (Firefox bug 1346674).
* Template call sites objects are now canonicalized per realm, based upon their list of raw strings (Firefox bug 1108941).
* `TypedArray` constructors (like `Int8Array`, `Float32Array`, etc.) have been updated to ES2017. They now use the `ToIndex` operation and allow constructors without arguments, which return zero-length typed arrays (Firefox bug 1317383).
### APIs

#### New APIs

* The Collaborative Scheduling of Background Tasks API (also known as the **Background Tasks API** or the `requestIdleCallback` API) is now enabled by default after being available behind a preference since Firefox 53. This API lets you schedule tasks to be executed when the browser determines that there's free time available before the next repaint occurs, so that your code can make use of that time without causing visible performance lag (Firefox bug 1314959).
* The WebVR 1.1 API is now turned on by default on Windows (and is available on macOS in Nightly). This API exposes virtual reality devices — for example head-mounted displays like the Oculus Rift or HTC Vive — to web apps, enabling developers to translate position and movement information from the display into movement around a 3D scene, and present content into such displays.
* The Intersection Observer API — which provides a way to asynchronously observe changes in the intersection of a target element with an ancestor element or with a top-level document's viewport — has been added (Firefox bug 1321865).

#### DOM

* The `Window` properties `scrollX` and `scrollY` (as well as their aliases `pageXOffset` and `pageYOffset` have been updated to be subpixel precise. Instead of returning an integer, these now return a floating-point value which more accurately describes the scroll position on subpixel-precise displays (Firefox bug 1151421). If need be, you can use `Math.round()` to convert them into integers.
* `MediaQueryList` (and other related features) have been updated to match the latest spec. See Firefox bug 1354441, and also see `MediaQueryList` and `MediaQueryListEvent`.
* Methods of the `DOMTokenList` that modify the list value now automatically trim whitespace and remove duplicate tokens (Firefox bug 869788, also see Trimming of whitespace and removal of duplicates).
* The `HTMLInputElement`'s `maxLength` property can now be dynamically altered with JavaScript after the equivalent HTML has been created (Firefox bug 1352799).
* The `URL()` constructor can no longer accept a `DOMString` as its base (2nd parameter) — it only accepts a `USVString`. It can still use an existing `URL` object for the base, which stringifies itself to the object's `href` attribute (Firefox bug 1368950).

#### DOM events

* The event types supported by the `Document.createEvent()` method have been updated as per the latest DOM spec (Firefox bug 1251198).
* The `MessageEvent.origin` property value is now of type `USVString`, not `DOMString`, and the `MessageEvent.source` property now takes a `MessageEventSource` value (which can be a WindowProxy, `MessagePort`, or `ServiceWorker` object) (Firefox bug 1311324).
* The pinch-to-zoom gesture has now been mapped to the `wheel` event plus the + `Ctrl` key. This mapping was implemented to allow developers to implement simple zooming functionality using the pinch-to-zoom gesture on mobile screens/trackpads (mousewheel + `Ctrl` commonly zooms) (Firefox bug 1052253).

#### Selection API

* The Selection API has been updated so that it has parity with other browsers in terms of how editing hosts are given focus when the selection moves inside them (Firefox bug 1318312). See Behavior of Selection API in terms of editing host focus changes for more details.
* The `Selection` API has been updated to match some recent spec changes (Firefox bug 1359371):
    + The `collapse()` and `extend()` methods' `offset` parameter is now optional.
    + The `collapse()` method's `node` parameter is now nullable.
    + The `containsNode()` method's `partialContainment` parameter is now optional.
    + The `deleteFromDocument()` method has been added.
* Also in the `Selection` API, `Selection.empty()` and `Selection.setPosition()` have been added as aliases of `Selection.removeAllRanges()` and `Selection.collapse()`, for web compat and WebKit/Blink parity reasons (Firefox bug 1359387).
* The `StorageManager.persist()` and `StorageManager.persisted()` methods of the Storage API have been implemented and exposed to `Window` contexts (Firefox bug 1286717).

#### Workers

* Workers and shared workers can now be created with an identifying `name` property. See the `Worker()` and `SharedWorker()` constructors, and the `DedicatedWorkerGlobalScope` and `SharedWorkerGlobalScope` interfaces. (Firefox bug 1364297).
* `setTimeout()` and `setInterval()` are now subject to minimum interval throttling for tracking scripts in background tabs — see Throttling of tracking timeout scripts (Firefox bug 1355311).

#### Service Workers/Push

* Messages sent to service worker contexts (e.g. as the event object of `onmessage` are now represented by `MessageEvent` objects, for consistency with other web messaging features.
* The `PushManager.subscribe()` method now accepts `ArrayBuffer`s and Base64-encoded strings as `applicationServerKey` values (Firefox bug 1337348).

#### Web Audio API

* A non-standard constructor (which accepted a string enum value indicating the purpose for which the context would be used) for `AudioContext` interface was causing errors to be thrown when the `options` parameter was provided. We have removed the non-standard constructor. However, please note that the `options` parameter is not yet supported in Firefox and is currently ignored (Firefox bug 1361475).

#### WebRTC

* `getUserMedia()` now provides a stereo audio stream by default if the source device provides stereo sound; support to specifically request mono input will come in Firefox 56. This only works on desktop at this time; mobile Firefox does not currently support stereo audio input sources (Firefox bug 971528).
* The `getUserMedia()` media capabilities, constraints, and settings `autoGainControl` and `noiseSuppression` now match the spec; formerly they were `moz`-prefixed (Firefox bug 1366415).
* When called with an empty constraints set, `getUserMedia()` was incorrectly returning `NotSupportedError` instead of `TypeError`. This has been fixed (Firefox bug 1349480).
* The following new WebRTC statistics are available: `framesEncoded`, `pliCount`, `nackCount`, and `firCount` (Firefox bug 1348657).
* The `RTCInboundRTPStreamStats` dictionary field formerly called `mozRtt` has been renamed to `roundTripTime` to match the specification; in addition, its behavior has been adjusted to match the standard: it contains a double-precision floating point value which estimates the round-trip time based on the RTCP timestamps in the RTCP Receiver Report, measured in seconds (following the algorithm described in RFC 3550, section 6.4.1). (Firefox bug 1344970). However, please be aware that *this property is moving* to a different dictionary (`RTCRemoteInboundRTPStreamStats`) soon (Firefox bug 1380555).
* The `RTCRTPStreamStats` dictionary now includes the fields `firCount`, `pliCount`, and `nackCount`. These return low-level information that can be used to determine how reliable the connection is (Firefox bug 1348657).
* The `RTCOutboundRTPStreamStats` dictionary now includes the field `framesEncoded`, which reports the number of frames that have been successfully encoded for the stream; with this information, you can compute the frame rate (Firefox bug 1348657).
* On Android, there's now a pref to turn on hardware video encoding to improve video call performance and save on battery. To be enabled by default in Firefox 56 (Firefox bug 1265755).

#### Encrypted Media Extensions API

* Firefox currently allows Encrypted Media Extensions to be used in insecure contexts, despite this not being allowed in the specification. This will be changed in the near future, and starting in Firefox 55, deprecation warnings are output to the web console when this is done. (Firefox bug 1361000).
* Firefox currently doesn't require that at least one `MediaKeySystemCapabilities` object be included in the `suggestedConfigurations` parameter passed into `Navigator.requestMediaKeySystemAccess()`, which the specification does mandate. Starting in Firefox 55, a warning is output to the web console when any audio or video configuration is specified without specifying supported codecs. Soon, failure to include a valid configuration for one or more of audio and video will throw an exception Firefox bug 1368683).

#### WebGL

* The `WEBGL_compressed_texture_s3tc_srgb` extension is now available to WebGL and WebGL2 contexts (Firefox bug 1325113).
### Security

* The `Geolocation` API is now available only to secure contexts (Firefox bug 1072859).
* The `Storage API` is now available only to secure contexts (Firefox bug 1268804).
* The loading of mixed content is now allowed on localhost (Firefox bug 903966).
* Loading of remote JAR files has been disabled again (Firefox bug 1329336).
### Plugins

* Flash content is now "click-to-activate" (Firefox bug 1317856). This was immediately put into effect for all users of Nightly, and 50% of beta users. For Firefox 55 release version, the plan is to activate this for 5% of users 2 weeks after release, 25% of users 4 weeks after release, and 100% of users 6 weeks after release (Firefox bug 1365714).
* Flash and other plugins can no longer be loaded from any URL scheme except for `http://` and `https://` (Firefox bug 1335475).
### Other

* Firefox on Linux can now be made to run in headless mode using the `-headless` flag (see Firefox bug 1356681).
Removals from the web platform
------------------------------

### HTML

* The `xml:base` attribute can no longer be used to set the base URL for paths appearing in the `style` attribute, for example —
 `<div xml:base="https://example.com/" style="background:url(picture.jpg)"></div>` (Firefox bug 1350521).
* The `<style>` element's `scoped` attribute has been hidden behind a pref (`layout.css.scoped-style.enabled`) in content documents in Firefox 55+, as no other browsers support it.
* Support for the obscure `MSThemeCompatible` value of the `<meta>` element's `http-equiv` attribute has been removed from Gecko. No other modern browsers support it, and it was causing compatibility problems (Firefox bug 966240).
### CSS

* The proprietary `:-moz-bound-element` pseudo-class has been removed (Firefox bug 1350147).
* The proprietary `-moz-anchor-decoration` value of `text-decoration-line` has been removed (Firefox bug 1355734).
### APIs

* The `UIEvent.isChar` property has never been supported by any browser but Firefox, and it has never been fully implemented except on macOS. For that reason, it was removed in Firefox 55 to align with other browsers.
* The proprietary Firefox OS Device Storage API has been removed from the platform (Firefox bug 1299500).
* The `aShowDialog` parameter of the non-standard `Window.find()` method (which could be specified to open up a "Find" dialog in the browser) has been removed (Firefox bug 1348409).
* The `HTMLFormElement.requestAutoComplete()` method has been removed (see `HTMLFormElement`) (Firefox bug 1270740).
* The non-standard, Mozilla-specific, WebRTC offer options `mozDontOfferDataChannel` and `mozBundleOnly` have been removed from the `RTCOfferOptions` dictionary and are no longer supported by `RTCPeerConnection.createOffer()` (Firefox bug 1196974).
* Support for the proprietary Firefox OS `Audio Channels API` has been removed from `HTMLMediaElement` and `AudioContext` (Firefox bug 1358061).
### SVG

* The `SVGZoomEvent` and `SVGZoomEvents` interfaces have been removed from the SVG2 spec and Gecko, along with the `onzoom <svg>` attribute (Firefox bug 1314388).
Changes for add-on and Mozilla developers
-----------------------------------------

### WebExtensions

* contextMenus.create()'s command property enables you to open browser action popups, page action popups, and sidebars from the context menu.
* proxy API
* chrome\_settings\_overrides key enables you to override the browser's homepage.
* browser\_style property enables you to have browser-like styling for browser action popups, sidebars, and options pages.
* permissions API
Older versions
--------------

* 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
* Firefox 28 for developers
* Firefox 27 for developers
* Firefox 26 for developers
* Firefox 25 for developers
* Firefox 24 for developers


Firefox 49 for developers - Mozilla

Firefox 49 for developers
=========================

To test the latest developer features of Firefox, install Firefox Developer Edition Firefox 49 was released on September 20, 2016. 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

* JavaScript errors logged into the console now provide a [Learn more] link for additional debugging help (Firefox bug 1179876).
* CSS autocomplete: show more suggestions in autocomplete popup (Firefox bug 1260419).
* The Animation Inspector now exposes animation performance information in DevTools (Firefox bug 1254408).
* The Inspector's context menu has been reorganized to be cleaner and easier to use (Firefox bug 1211613).
* The Inspector now supports `#RRGGBBAA` and `#RGBA` syntax for color values (Firefox bug 1271191).
* The developer tools no longer display self-closing tags (such as `<br>` and `<img>` as if they have a closing tag on HTML pages; the behavior is unchanged for XHTML pages (Firefox bug 820926).
* Accessibility improvements!
    + The toolbox does a better job of ensuring that keyboard focus is more visible (Firefox bug 1242851).
    + Accessibility labels have been added to unlabeled controls (Firefox bug 1242715).
    + Added proper tree view semantics and keyboard navigation to the Inspector's markup view (Firefox bug 1242694).
* The Network Monitor now shows a Cause column, which provides an indication of what caused each particular network request (Firefox bug 1134073).
* In the *about:debugging* Add-ons page, the Reload button is only enabled for temporary add-ons. It will be disabled for all other add-ons (Firefox bug 1273184).
* In the *about:debugging* Workers page, a warning message will be displayed in the Service Workers section if service workers are incompatible with the current browser configuration (Firefox bug 1266415).
* *about:debugging* now has a new Tabs page available, which provides a complete list of all the debuggable tabs open in the current Firefox instance (Firefox bug 1266128).
* The *Disable Cache* option in the Toolbox Advanced settings has been renamed to Disable HTTP Cache, to make it clearer that this affects the HTTP cache, and not Service Workers/the Cache API (bug(1253018)).
* The Storage Inspector now allows IndexedDB databases to be deleted via their own context menus (Firefox bug 1205123), and will display warning messages if the IndexedDB cannot be deleted for some reason (if there are still active connections, for example) (Firefox bug 1268460).
### HTML

* Added support for the `<details>` and `<summary>` elements (Firefox bug 1226455).
* The `pattern` attribute of the `<input>` element now uses the `'u'` parameter in the underlying JavaScript `RegExp` (Firefox bug 1227906).
* To match a spec change, an invalid value of the `kind` attribute of the `<track>` element is now treated like `"metadata"` instead of `"subtitles"` (Firefox bug 1269712).
* The `<iframe>` element's `sandbox` attribute now supports the `'allow-popups-to-escape-sandbox'` and `'allow-modals'` values (Firefox bug 1190641).
* Support for microdata attributes and the Microdata API have been removed (Firefox bug 909633).
* The `referrerpolicy` attribute on the `<a>` element now supports the `'no-referrer-when-downgrade`' and `'origin-when-cross-origin'` (Firefox bug 1178337).
* The `form` content attribute of the `<label>` element has been removed. The `HTMLLabelElement.form` property still exists, but now returns the form with which the label's control is associated, if there is a control (and if that control is associated with a form) (Firefox bug 1268852).
### CSS

* Added `background-position-x` and `background-position-y`, which allow separately specifying the horizontal and vertical offsets at which to draw a background image; these are components of `background-position` (Firefox bug 550426).
* Added support for the `round` and `space` keywords to `background-repeat` (Firefox bug 548372).
* On `background-clip`, the keyword `text` is now activated by default (Firefox bug 1264905).
* Added support for specifying colors with an alpha channel using 4- and 8-digit CSS hex color values (#RRGGBBAA and #RGBA) (Firefox bug 567283).
* The pseudo-class `:dir` has been unprefixed (Firefox bug 859301).
* In our experimental implementation (not yet activated by default) of `clip-path`, we can now interpolate between `<basic-shape>` values (Firefox bug 1110460).
* Added the `q` length unit (Firefox bug 1274526).
* The property `text-align-last` has been unprefixed (Firefox bug 1039541).
* Added support for `overflow-wrap`, replacing `word-wrap` that is still supported as an alternative name (Firefox bug 955857).
* Our experimental CSS Grids implementation has been improved:
    + Implemented `<percentage>` for the `grid-gap`, `grid-row-gap`, and `grid-column-gap` properties (Firefox bug 1266268).
    + Implemented grid layout support for `align`, `justify-self``:baseline` and `last-baseline` (aka "baseline self-alignment") (Firefox bug 1221525).
    + Implemented grid item baseline content alignment (Firefox bug 1256429).
* Our experimental CSS Masks implementation has been improved:
    + The `mask-origin` property now uses `border-box` instead of `padding-box` as initial value, to match the spec (Firefox bug 1258286).
    + The `mask-repeat` property now supports the `space` and `round` values (Firefox bug 1258626).
    + Fixed an issue preventing the `mask-position` attribute from being animated (Firefox bug 1273804).
* The preference controlling `text-emphasis` has been removed, so support for this property can no longer be disabled (Firefox bug 1229609).
### JavaScript

* The ES2015 `getPrototypeOf()` and `setPrototypeOf()` `Proxy` traps have been implemented (Firefox bug 888969).
* The ES2015 `RegExp.prototype[@@match]()`, `RegExp.prototype[@@replace]()`, `RegExp.prototype[@@search]()`, and `RegExp.prototype[@@split]()` methods, and `RegExp[@@species]` getter have been implemented (Firefox bug 887016).
* The deprecated, non-standard `flags` argument of `String.prototype.``match`/`search`/`replace` has been removed (Firefox bug 1108382).
* The behavior of the `Date.parse()` method when parsing 2-digit years has been changed to be more interoperable with the Google Chrome browser (Firefox bug 1265136).
### Interfaces/APIs/DOM

#### DOM & HTML DOM

* The method `DOMTokenList.supports()` has been added (Firefox bug 1257849).
* The `DOMTokenList.replace()` method has been added (Firefox bug 1224186).
* Leading `'?'` characters are now ignored in the parameter of the `URLSearchParams()` constructor (Firefox bug 1268361).
* The value returned by `URL.origin`, `HTMLAnchorElement.origin`, and `HTMLAreaElement.origin` for URL using the `blob:` scheme is no longer incorrectly `null` but is instead the origin of the URL formed by removing the leading `blob:` (Firefox bug 1270451).
* In prerendering mode, the `Document.visibilityState` property now returns `'prerender'` (Firefox bug 1069772).
* The `isSecureContext` property has been implemented (Firefox bug 1162772).
* The DOM4 `Element.before`, `Element.after`, `Element.replaceWith`, `Element.append` and `Element.prepend` methods have been implemented (Firefox bug 911477).
* The `TouchList.identifiedTouch()` method has been removed (Firefox bug 1188539).
* By default, the `scrollbars` `Window` feature is enabled when calling `Window.open()`. In the past, while it was strongly recommended to enable it, it wasn't the default (Firefox bug 1257887).
* Added the *experimental* and *non-standard* `HTMLMediaElement.seekToNextFrame()` method, which allows seeking frame-by-frame through video content (Firefox bug 1235301). While you're encouraged to experiment with this method to help us understand how useful it is, *do not use it in production code!*
* The `HTMLLabelElement.form` property now returns the form with which the label's control is associated, if there is a control (and if that control is associated with a form). Previously, labels were directly associated with forms using this property (Firefox bug 1268852).
* Support for the third parameter of `EventTarget.addEventListener()`, either a `Boolean` or an `EventListenerOptions` has been added (Firefox bug 1266164 and Firefox bug 1266066).
* The audio volume related values for `KeyboardEvent.key` have been renamed. `"VolumeDown"` is now `"AudioVolumeDown"`, `"VolumeUp"` is now `"AudioVolumeUp"`, and `"VolumeMute"` is now `"AudioVolumeMute".` This brings Firefox into alignment with the latest draft of the UI Events specification (Firefox bug 1272578). See Code values for keyboard events for a full list of available key codes.
* The keys previously referred to as `"MozHomeScreen"`, `"MozCameraFocusAdjust"`, and `"MozPhoneCall"` now have official names in the UI Events specification: `"GoHome"`, `"CameraFocus"`, and `"Call"`. Firefox 49 has been updated to use the new names (Firefox bug 1272599). See Code values for keyboard events for a full list of available key codes.
* The key values `"Separator"` and `"MediaSkip"` have been removed, as they were deprecated and unused (Firefox bug 1232919).
* Key values and the corresponding key codes `"Hyper"` and `"Super"` have been added to represent these legacy modifier keys (Firefox bug 1232919).
* Two key values for multimedia numeric keypad keys have been added: `"Key11"` and `"Key12"` (Firefox bug 1232919).
* The following new key values have been added for audio control keys: `"AudioBassBoostToggle"`, `"AudioTrebleDown"`, and `"AudioTrebleUp"` (Firefox bug 123919).
* Key values have been added for these microphone control keys: `MicrophoneToggle`, `MicrophoneVolumeDown`, `MicrophoneVolumeUp`, and `MicrophoneVolumeMute` (Firefox bug 123919).
* New key values have been added to support speech recognition devices: `SpeechCorrectionList` and `SpeechInputToggle` (Firefox bug 1232919).
* New key values have been added to support special buttons on phones: `AppSwitch`, `Call`, `CameraFocus`, `EndCall`, `GoBack`, `GoHome`, `HeadsetHook`, `LastNumberRedial`, `Notification`, `MannerMode`, and `VoiceDial` (Firefox bug 1232919).
* These new application key values have been added: `LaunchContacts` and `LaunchPhone` (Firefox bug 1232919).
* New key values have been added to support television devices: `TV3DMode`, `TVAntennaCable`, `TVAudioDescription`, `TVAudioDescriptionMixDown`, `TVAudioDescriptionMixUp`, `TVContentsMenu`, `TVDataService`, `TVInput`, `TVInputComponent1`, `TVInputComponent2`, `TVInputComposite1`, `TVInputComposite2`, `TVInputHDMI1`, `TVInputHDMI2`, `TVInputHDMI3`, `TVInputHDMI4`, `TVInputVGA1`, `TVMediaContext`, `TVNetwork`, `TVNumberEntry`, `TVRadioService`, `TVSatellite`, `TVSatelliteBS`, `TVSatelliteCS`, `TVSatelliteToggle`, `TVTerrestrialAnalog`, `TVTerrestrialDigital`, `TVTimer`, and `DVR` (Firefox bug 1232919).
* The key value `MediaSelect` has been replaced with the standard `LaunchMediaPlayer` key value (Firefox bug 1272592).
* Additional media player key values have been added as well. These are `MediaAudioTrack`, `MediaSkipBackward`, `MediaSkipForward`, `MediaStepBackward`, `MediaStepForward`, `MediaTopMenu`, `NavigateIn`, `NavigateNext`, `NavigateOut`, and `NavigatePrevious` (Firefox bug 1232919).

#### Canvas

* The `CanvasRenderingContext2D.filter` property, which provides support for adding filters to a canvas, is now activated by default and no longer needs to be enabled using a preference (Firefox bug 1173545).

#### WebGL

* The `EXT_color_buffer_float` WebGL 2 extension has been implemented (Firefox bug 1129332).
* The `webglcontextcreationerror` event, which is sent when a WebGL context creation attempt fails, has been implemented (Firefox bug 1271478). Use this to help understand what went wrong, both for debugging and for production error handling.

#### IndexedDB

* You can now rename IndexedDB indexes; the `IDBIndex.name` property is no longer read-only (Firefox bug 1118028).
* You can also now rename `IDBObjectStore`s; the `IDBObjectStore.name` property is no longer read-only (Firefox bug 1118028).

#### Service Workers and related

* The Fetch API's `Response` object now implements the `redirected` property, which indicates whether or not the response is for a request which was redirected. Please review the security related notes in the documentation before using this property (Firefox bug 1243792).
* In the Permissions API, Firefox no longer supports the 'push' `PermissionDescriptor` dictionary type (referred to in the spec as `PushPermissionDescriptor`); this is because Firefox relies on a quota system for controlling the `userVisibleOnly` status instead, and was throwing an error when it encountered a `PushPermissionDescriptor` instance (Firefox bug 1266821). With this dictionary removed, Firefox now ignores it.

#### Media Streams

* In the past, it was possible for a call to `MediaDevices.getUserMedia()` which requests both audio and video to succeed in cases where the user has only one of the two types of hardware available. This has been fixed (Firefox bug 802326).
* In prior versions of Firefox, it was possible for a call to `MediaDevices.getUserMedia()` which requests both audio and video to succeed even though the user denied access to one but not both of the matching devices. This has been fixed (Firefox bug 802326). This involves minor user interface changes as well, to remove the options to choose "No audio" or "No video" when the user is prompted for permissions.
* The `MediaStream.getTrackById()` method has been implemented (Firefox bug 1208390).

#### WebRTC

* The `RTCPeerConnection.addTrack()` method has been updated to allow tracks which are not components of the specified streams to be added to the connection. Instead, the streams are used to group tracks on the receiving end of the connection (Firefox bug 1271669).

#### New APIs

* The `PerformanceObserver` API is now activated by default on Nightly. It is not available by default in other versions of Firefox 49 (Firefox bug 1271487).

#### Others

* `XMLHttpRequest.getResponseHeader()` and `XMLHttpRequest.getAllResponseHeaders()` return empty headers in case the preference `network.http.keep_empty_response_headers_as_empty_string` is set to `true` (Firefox bug 669259).
* The Firefox OS-only Data Store API has been removed (Firefox bug 1261009).
* The Fullscreen API event handlers `Document.onfullscreenchange` and `Document.onfullscreenerror` have been removed from `Element` as they were never fired there; the prefixed versions of these event handlers have been kept there for compatibility purposes, however (Firefox bug 1270386). Note that this is not yet activated by default, but is behind the `full-screen-api.unprefix.enabled` preference (Firefox bug 1268749).
* The obsolete `Document.mozFullScreen` property has been unprefixed to `Document.fullscreen` Firefox bug 1269157. Note that this is not yet activated by default by behind the `full-screen-api.unprefix.enabled` preference (Firefox bug 1268749).
* The read-only properties `Document.fullscreenElement` and `Document.fullscreenEnabled` no longer throw an exception if an attempt is made to change their values; instead, the new value is silently ignored and the setter function is a no-op (Firefox bug 1269798).
* Any kind of data can now be retrieved from the clipboard using `DataTransfer.getData()`: previously, only data of certain MIME types were supported Firefox bug 860857.
* Our implementation of the Frame Timing API, consisting of the two interfaces `PerformanceCompositeTiming` and `PerformanceRenderTiming`, has been removed as the spec has been completely rewritten (Firefox bug 1271846).
* To match the spec, the `VTTCue.positionAlign` property now returns a `PositionAlign` enum instead of an `Align` enum (Firefox bug 1276129).
* The speech synthesis part of Web Speech API is now activated by default (Firefox bug 1268633).
* The Performance Timeline API is now available by default in Nightly (though not in Aurora, Beta or Release).
* The `install` event, and the `Window.oninstall` event handler, are now supported for Web Manifests (Firefox bug 1265279).
* When using the `AudioContext.createPeriodicWave()` method of the Web Audio API, you can now specify whether the resulting periodic wave should be normalized by including a dictionary object as the third parameter, which includes a single parameter — `{disableNormalization: true}` (Firefox bug 1265405).
* In the WebVTT API, `VTTCue.positionAlign` now correctly returns a `PositionAlignSetting` enum as per spec; previously it returned an `AlignSetting` enum (Firefox bug 1276129).
* The Speech Synthesis part of the Web Speech API is now enabled by default across all desktop browsers (Firefox bug 1268633).
* The `Animation()` constructor of the Web Animations API now accepts a null timeline (Firefox bug 1096776).
* The `KeyframeEffect` property `target` is now supported in Firefox, if you have enabled Web Animations (Firefox bug 1067769).
### MathML

*No change.*

### SVG

* Removed support for the deprecated `<altGlyph>`, `<altGlyphDef>` and `<altGlyphItem>` elements (Firefox bug 1260032).
### Audio/Video

*No change.*

### Plugins and Flash

Beginning in Firefox 49, Firefox, by default, blocks certain kinds of Flash content that aren't necessary for sites to function well. This behavior, controlled by the preference `browser.safebrowsing.blockedURIs.enabled`, helps to improve the performance of sites and Firefox in general without having significant impact on site usability. It also helps improve stability of the browsing experience by eliminating a major cause of crashes. The blocked Flash modules include several used just for fingerprinting purposes, as well as a number of "supercookie" modules, and in the future may be expanded to include more types of blocked modules. See Firefox bug 1275591 for details.

This marks the next step in the journey toward a plugin-free future. HTML is very close to the point where plugins will no longer be needed to get the job done.

HTTP
----

* The `Cache-Control: immutable` directive has been implemented (Firefox bug 1267474). See also this blog post for more information.
* The `require-sri-for` `Content-Security-Policy` has been implemented (Firefox bug 1265318).
Networking
----------

* The Proxy Auto-Configuration (PAC) implementation has been updated. Now `weekdayRange`, `dateRange`, and `timeRange` support "reversed ranges", for example, `weekdayRange("SAT", "MON")` will evaluate `true` if the current day is Saturday, Sunday, or Monday (Firefox bug 1251332).
Security
--------

* The `isSecureContext` property, indicating whether a context is capable of using features that require secure contexts, has been implemented (Firefox bug 1162772).
Compatibility
-------------

In order to improve compatibility with existing content, Firefox now accepts some WebKit prefixed properties and attributes.

* The following properties now also work prefixed with `-webkit`:
    + `-webkit-align-items`
    + `-webkit-align-content`
    + `-webkit-align-self`
    + `-webkit-animation`
    + `-webkit-animation-delay`
    + `-webkit-animation-direction`
    + `-webkit-animation-duration`
    + `-webkit-animation-fill-mode`
    + `-webkit-animation-iteration-count`
    + `-webkit-animation-name`
    + `-webkit-animation-play-state`
    + `-webkit-animation-timing-function`
    + `-webkit-backface-visibility`
    + `-webkit-background-clip`
    + `-webkit-background-origin`
    + `-webkit-background-size`
    + `-webkit-border-bottom-left-radius`
    + `-webkit-border-bottom-right-radius`
    + `-webkit-border-image`
    + `-webkit-border-top-left-radius`
    + `-webkit-border-top-right-radius`
    + `-webkit-border-radius`
    + `-webkit-box-shadow`
    + `-webkit-filter`
    + `-webkit-flex`
    + `-webkit-flex-basis`
    + `-webkit-flex-direction`
    + `-webkit-flex-flow`
    + `-webkit-flex-grow`
    + `-webkit-flex-shrink`
    + `-webkit-flex-wrap`
    + `-webkit-justify-content`
    + `-webkit-order`
    + `-webkit-perspective`
    + `-webkit-perspective-origin`
    + `-webkit-text-size-adjust`
    + `-webkit-transform`
    + `-webkit-transform-origin`
    + `-webkit-transform-style`
    + `-webkit-transition`
    + `-webkit-transition-delay`
    + `-webkit-transition-duration`
    + `-webkit-transition-property`
    + `-webkit-transition-timing-function`
    + `-webkit-user-select`
* The following properties map to the equivalent prefixed property:
    + `-webkit-box-flex`
    + `-webkit-box-ordinal-group`
    + `-webkit-box-orient`
    + `-webkit-box-align`
    + `-webkit-box-pack`
* For `<image>` values:
    + The following functions map to their unprefixed equivalents: `-webkit-linear-gradient()`, `-webkit-radial-gradient()`, `-webkit-repeating-linear-gradient()`, and `-webkit-repeating-radial-gradient()`.
    + The outdated `-webkit-gradient` is supported (and translated to a regular gradient)
* The following `display` values are translated:
    + `-webkit-box` to `-moz-box`
    + `-webkit-flex` to `flex`
    + `-webkit-inline-box` to `inline-flex`
    + `-webkit-inline-flex` to `-moz-inline-flex`
* The following properties are supported (and don't map to any unprefixed equivalent):
    + `-webkit-text-fill-color`
    + `-webkit-text-stroke-color`
    + `-webkit-text-stroke-width`
    + `-webkit-text-stroke`
* The `WebKitCSSMatrix` interface is an alias of `DOMMatrix`
* The following media query features have been implemented:
    + `-webkit-min-device-pixel-ratio` as an alias of `min-resolution` with the same value (in `dppx)`, though this feature is disabled by default (behind about:config pref `layout.css.prefixes.device-pixel-ratio-webkit`)
    + `-webkit-max-device-pixel-ratio` as an alias of `max-resolution` of the same value (in `dppx`); this feature is also disabled by default, behind the same about:config pref.
    + `-webkit-transform-3d` always matching, indicating 3d transform support.
Changes for add-on and Mozilla developers
-----------------------------------------

### WebExtensions

* Support for the `history` has been added. This provides access to the browser history, with methods available for searching the history, getting information about previously-visited pages, and adding and removing history entries.
* Added the `tabs.removeCSS()` method to the tabs API. This method lets you remove CSS which was previously injected by calling `tabs.insertCSS()`.
### Interfaces

* In `EventTarget.addEventListener()`, the value `mozSystemGroup`, active only in code running in XBL or in Firefox's chrome, is a `Boolean` which indicates if the listener is added to the system group. (Firefox bug 1274520)
### Other

*No change.*

Older versions
--------------

* 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
* 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 103 for developers - Mozilla

Firefox 103 for developers
==========================

This article provides information about the changes in Firefox 103 that will affect developers. Firefox 103 was released on July 26, 2022.

Changes for web developers
--------------------------

### HTML

#### Removals

* Support for the `<menuitem>` element has been removed along with the `dom.menuitem.enabled` preference.
 For more details, see Bug 1372276.
### MathML

#### Removals

* The deprecated `scriptminsize` and `scriptsizemultiplier` attributes have been removed (Firefox bug 1772697).
### CSS

* The `backdrop-filter` property (which can be used to apply graphical effects such as blurring or color shifting to the area behind an element) is now available by default. It was earlier behind a preference setting (Firefox bug 1578503).
* The `scroll-snap-stop` property is now available (Firefox bug 1312165). You can use this property's `always` and `normal` values to specify whether or not to pass the snap points, even when scrolling fast.
* Support has been added for the `:modal` pseudo class. It selects all elements that are in a state in which they exclude all interaction with other elements until the interaction has been dismissed (Firefox bug 1768535).
* The `style` value for the `contain` property is now supported. You can use this value for properties that can have effects on more than just an element and its descendants for effects don't escape the containing element. For more information, see (Firefox bug 1463600).
### JavaScript

* Native Error types can now be serialized using the structured clone algorithm.
 This includes `Error`, `EvalError`, `RangeError`, `ReferenceError`, `SyntaxError`, `TypeError`, `URIError` and `AggregateError`.
 Serialized properties include the `name`, `message`, `cause`, `fileName`, `lineNumber` and `columnNumber`.
 For `AggregateError` the `message`, `name`, `cause` and `errors` properties are serialized.
 See Firefox bug 1556604 for more details.
### HTTP

No notable changes.

### Security

No notable changes.

### APIs

* `ReadableStream`, `WritableStream`, `TransformStream` are now Transferable objects, which means that ownership can be transferred when sharing the objects between a window and workers using `postMessage`, or when using `structuredClone()` to copy an object.
 After transferring, the original object cannot be used.
 See Firefox bug 1659025 for more details.
* `caches`, `CacheStorage`, and `Cache` now require a secure context; the properties/interfaces are not defined if used in an insecure context.
 Previously `cache` would return a `CacheStorage` that would throw an exception if used outside of a secure context.
 See Firefox bug 1112134 for more details.
### WebAssembly

No notable changes.

### WebDriver conformance (WebDriver BiDi, Marionette)

#### WebDriver BiDi

* Added a preference to disable experimental BiDi commands and events `remote.experimental.enabled` (Firefox bug 1777951).
* Added a `script` module with an experimental implementation of the `evaluate` command. Only available if `remote.experimental.enabled` is set to `true` (Firefox bug 1742979).
* Added serialization support for collections with simple values and complex objects, used for instance for the event data of `log.entryAdded` or the return value of `script.evaluate` (Firefox bug 1770752).
* Fixed an edge case for `browsingContext.navigate` when navigating to a cached image (Firefox bug 1763133).

#### Marionette

* Updated the `platformVersion` capability to be returned as `moz:platformVersion` (Firefox bug 1771760).
* Removed support for `ChromeElement`; all elements are now serialized as `WebElement` (Firefox bug 1775036 and Firefox bug 1775064).
Changes for add-on developers
-----------------------------

### Removals

* Removed the ServiceWorker API in WebExtensions (`'serviceWorker' in navigator` now returns `false` when run inside an extension) (Firefox bug 1593931).
Older versions
--------------

* Firefox 102 for developers
* Firefox 101 for developers
* Firefox 100 for developers
* Firefox 99 for developers
* Firefox 98 for developers
* Firefox 97 for developers
* Firefox 96 for developers
* Firefox 95 for developers
* Firefox 94 for developers
* Firefox 93 for developers
* Firefox 92 for developers
* Firefox 91 for developers
* Firefox 90 for developers
* Firefox 89 for developers
* Firefox 88 for developers
* Firefox 87 for developers
* Firefox 86 for developers
* Firefox 85 for developers
* Firefox 84 for developers
* Firefox 83 for developers
* Firefox 82 for developers
* Firefox 81 for developers
* Firefox 80 for developers
* Firefox 79 for developers
* Firefox 78 for developers
* Firefox 77 for developers
* Firefox 76 for developers
* Firefox 75 for developers
* Firefox 74 for developers
* Firefox 73 for developers
* Firefox 72 for developers


Firefox 91 for developers - Mozilla

Firefox 91 for developers
=========================

This article provides information about the changes in Firefox 91 that will affect developers. Firefox 91 was released on August 10, 2021.

**Note:** See also Hopping on Firefox 91 on Mozilla Hacks.

Changes for web developers
--------------------------

### HTML

No changes

### CSS

* A fix to how the `@counter-style/pad` descriptor handles the negative sign (Firefox bug 1714445).
* The `-moz-tab-size` property has been unprefixed to the standard `tab-size`, and the prefixed version maintained as an alias (Firefox bug 737785).

#### Removals

* The non-standard `-moz-outline-radius` property has been removed (Firefox bug 1715984). The property has not been usable by web developers since Firefox 88, this completes the removal.
### JavaScript

* `Intl.DateTimeFormat.prototype.formatRange()` and `Intl.DateTimeFormat.prototype.formatRangeToParts()` are now supported in release builds. The `formatRange()` method returns a localized and formatted string for the range between two `Date` objects (e.g. "1/05/21 – 1/10/21"). The `formatRangeToParts()` method returns an array containing the locale-specific *parts* of a formatted date range (Firefox bug 1653024).
* The `Intl.DateTimeFormat() constructor` allows four new `timeZoneName` options for formatting how the timezone is displayed. These include the localized GMT formats `shortOffset` and `longOffset`, and the generic non-location formats `shortGeneric` and `longGeneric` (Firefox bug 1653024).
* The `Error() constructor` can now take the error `cause` as value in the `option` parameter.
 This allows code to catch errors and throw new/modified versions that retain the original error and stack trace (Firefox bug 1679653).
### HTTP

* The Gamepad API now requires a secure context (Firefox bug 1704005).
### APIs

#### DOM

* The Visual Viewport API is now enabled by default on Firefox desktop releases (it has been enabled on Firefox for Android since version 68).
 The API provides access to information describing the position of the visual viewport relative to the document, as well as to the window's content area.
 It also provides events that allow changes to the viewport to be monitored. (Firefox bug 1551302).
* The Gamepad API is now protected by `Feature-Policy: gamepad`.
 If disallowed by the Permission Policy, calls to `Navigator.getGamepads()` will throw a `SecurityError` `DOMException`,
 and the `gamepadconnected` and `gamepaddisconnected` events will not fire.
 The default `allowlist` is `*`; this default will be updated to `self` in a future release, in order to match the specification. (Firefox bug 1704005).
* `Window.clientInformation` has been added as an alias for `Window.navigator`, in order to match recent specification updates and improve compatibility with other major browsers (Firefox bug 1717072).
* Changing the playback speed of a media element (`<video>` or `<audio>`) using the `playbackRate` attribute now works when the media element is captured to a `MediaStream` or via `AudioContext.createMediaElementSource` (Firefox bug 1517199).
### WebDriver conformance (Marionette)

* Fixed a bug, which caused the commands `WebDriver:AcceptAlert` and `WebDriver:DismissAlert` to hang for user prompts as opened in a popup window (Firefox bug 1721982).
* Fixed an inappropriate handling of the `webSocketUrl` capability, which would return `true` if `webSocketUrl` was not supported (Firefox bug 1713775).
Older versions
--------------

* Firefox 90 for developers
* Firefox 89 for developers
* Firefox 88 for developers
* Firefox 87 for developers
* Firefox 86 for developers
* Firefox 85 for developers
* Firefox 84 for developers
* Firefox 83 for developers
* Firefox 82 for developers
* Firefox 81 for developers
* Firefox 80 for developers
* Firefox 79 for developers
* Firefox 78 for developers
* Firefox 77 for developers
* Firefox 76 for developers
* Firefox 75 for developers
* Firefox 74 for developers
* Firefox 73 for developers
* Firefox 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers
* Firefox 69 for developers
* Firefox 68 for developers
* Firefox 67 for developers
* Firefox 66 for developers
* Firefox 65 for developers
* Firefox 64 for developers
* Firefox 63 for developers
* Firefox 62 for developers
* Firefox 61 for developers
* Firefox 60 for developers


Firefox 78 for developers - Mozilla

Firefox 78 for developers
=========================

This article provides information about the changes in Firefox 78 that will affect developers. Firefox 78 was released on June 30, 2020.

See also New in Firefox 78: DevTools improvements, new regex engine, and abundant web platform updates on Mozilla hacks.

Changes for web developers
--------------------------

### Developer Tools

#### Debugger

* You can now change the URL accessed by the remote device from the about:debugging panel. (Firefox bug 1617237)
* The **Disable JavaScript** menu item in the Debugger now only affects the current tab, and is reset when the Developer Tools are closed. (Firefox bug 1640318)
* Logpoints can map variable names in source-mapped code back to their original names, if you enable **Maps** in the Scopes pane. (Firefox bug 1536857)

#### Network Monitor

* In the Network Monitor, you can now resize the columns of the request list by dragging the column borders anywhere in the table. (Firefox bug 1618409)
* The request details panel in the Network Monitor has some UX improvements. (Firefox bug 1631302, Firefox bug 1631295)
* If a request was blocked, the request list now shows the reason, such as an add-on, CSP, CORS, or Enhanced Tracking Protection. (Firefox bug 1555057, Firefox bug 1445637, Firefox bug 1556451)

#### Other tools

* The Accessibility inspector is out of beta. You can use it to check for various accessibility issues on your site. (Firefox bug 1602075)
* Uncaught promise errors now provide all details in the Console, including their name and stack. (Firefox bug 1636590)
### CSS

* The `:is()` and `:where()` pseudo-classes are now enabled by default (Firefox bug 1632646).
* The `:read-only` and `:read-write` pseudo-classes are now supported without prefixes (Firefox bug 312971).
    + In addition, `:read-write` styles are no longer applied to disabled `<input>` and `<textarea>` elements, which was a violation of the HTML spec (Firefox bug 888884).
### JavaScript

* The `Intl.ListFormat` API is now supported (Firefox bug 1589095).
* The `Intl.NumberFormat()` constructor has been extended to support new options specified in the Intl.NumberFormat Unified API Proposal (Firefox bug 1633836). This includes among other things:
    + Support for scientific notations
    + Unit, currency and sign display formatting
* The `RegExp` engine has been updated and now supports all new features introduced in ECMAScript 2018:
    + Lookbehind assertions (Firefox bug 1225665)
    + `RegExp.prototype.dotAll` (Firefox bug 1361856)
    + Unicode property escapes (Firefox bug 1361876)
    + Named capture groups (Firefox bug 1362154)
* Due to a WebIDL spec change in mid-2020, we've added a `Symbol.toStringTag` property to all DOM prototype objects (Firefox bug 1277799).
* The garbage collection of `WeakMap` objects has been improved. `WeakMaps` are now marked incrementally (Firefox bug 1167452).
### APIs

#### DOM

* The `Element.replaceChildren` method has been implemented (Firefox bug 1626015).

#### Service workers

* Extended Support Releases (ESR): Firefox 78 is the first ESR release that supports Service workers (and the Push API). Earlier ESR releases had no support (Firefox bug 1547023).
### WebAssembly

* Wasm Multi-value is now supported, meaning that WebAssembly functions can now return multiple values, and instruction sequences can consume and produce multiple stack values (Firefox bug 1628321).
* WebAssembly now supports import and export of 64-bit integer function parameters (i64) using `BigInt` from JavaScript (Firefox bug 1608770).
### TLS 1.0 and 1.1 removal

* Support for the Transport Layer Security (TLS) protocol's version 1.0 and 1.1, is dropped from all browsers. Read TLS 1.0 and 1.1 Removal Update for the previous announcement and what actions to take if you are affected (Firefox bug 1643229).
Changes for add-on developers
-----------------------------

* `browsingData.removeCache` and `browsingData.removePluginData` now support deleting by hostname. (Firefox bug 1636784).
* When using `proxy.onRequest`, a filter that limits based on tab id or window id is now correctly applied. This could be useful for add-ons that want to provide proxy functionality just in just one window.
* Clicking within the context menu from the "all tabs" dropdown now passed the appropriate tab object. In the past, the active tab was erroneously passed.
* When using `downloads.download` with the saveAs option, the recently used directory is now remembered. While this information is not available to developers, it is very convenient to users.
Older versions
--------------

* Firefox 77 for developers
* Firefox 76 for developers
* Firefox 75 for developers
* Firefox 74 for developers
* Firefox 73 for developers
* Firefox 72 for developers
* Firefox 71 for developers
* Firefox 70 for developers
* Firefox 69 for developers
* Firefox 68 for developers
* Firefox 67 for developers
* Firefox 66 for developers
* Firefox 65 for developers
* Firefox 64 for developers
* Firefox 63 for developers
* Firefox 62 for developers
* Firefox 61 for developers
* Firefox 60 for developers
* 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 1.5 for developers - Mozilla

Firefox 1.5 for developers
==========================

Based on the Gecko 1.8 engine, Firefox 1.5 improved its already best in class standards support, and provided new capabilities to enable the next generation of web applications. Firefox 1.5 features improved support for CSS2 and CSS3, APIs for scriptable and programmable 2D graphics through SVG 1.1 and `<canvas>`, XForms and XML events, as well as many DHTML, JavaScript, and DOM enhancements.

Developer Tools
---------------

Several tools and browser extensions are available to help developers support Firefox 1.5.

* DOM Inspector, a tool that allows developers to inspect and modify documents without having to edit the document directly. DOM Inspector is available as part of the Custom install option in Firefox 1.5 under Developer Tools.
* JavaScript console, a tool to write and test JavaScript code as well as view JavaScript and CSS errors on a page.
* View page source, with syntax highlighting and find features.
* Browser extensions including the FireBug, Web Developer toolbar, Live HTTP Headers, HTML Validator and many more.

**Note:** Some extensions do not currently support Firefox 1.5, and will be automatically disabled.

Overview
--------

Some of the new features in Firefox 1.5:

### Website and application developers

SVG is supported in XHTML

SVG can be used in XHTML pages. JavaScript and CSS can be used to manipulate the picture in the same way you would script regular XHTML. See SVG in Firefox to learn about the status and known problems of SVG implementation in Firefox.

Drawing Graphics with Canvas

Learn about the new `<canvas>` tag and how to draw graphs and other objects in Firefox.

CSS3 Columns

Learn about the new support for automatic multi-column text layout as proposed for CSS3.

Using Firefox 1.5 caching

Learn about `bfcache` and how it speeds up back and forward navigation.

### XUL and Extension Developers

Building an Extension

This tutorial will take you through the steps required to build a very basic extension for Firefox. Also see another tutorial on MozillaZine knowledge base, which demonstrates the new features of the Extension Manager in 1.5 that make creating a new extension even easier.

XPCNativeWrapper

`XPCNativeWrapper` is a way to wrap up an object so that it's safe to access from privileged code. It can be used in all Firefox versions, though the behavior changed somewhat starting with Firefox 1.5 (Gecko 1.8).

Preferences System

Learn about the new widgets that allow you to create Options windows easier using less JavaScript code.

International characters in XUL JavaScript

XUL JavaScript files can now contain non-ASCII characters.

Tree API changes

The interfaces for accessing XUL `<tree>` elements have changed.

XUL Changes for Firefox 1.5

Summary of XUL changes. See also Adapting XUL Applications for Firefox 1.5.

#### Networking-related changes

* Certificate prompts can now be overridden on a per-channel basis. This works by setting an interface requester as an `nsIChannel`'s notificationCallbacks and giving out an interface for `nsIBadCertListener`.
* nsIWebBrowserPersist's listeners can now implement `nsIInterfaceRequestor::GetInterface` and will get an opportunity to provide all interfaces that channels might ask for, including `nsIProgressEventSink` (not too useful, redundant with `nsIWebProgressListener`). Useful interfaces here include `nsIChannelEventSink` and `nsIBadCertListener`.
* Extensions or other necko consumers, including XMLHttpRequest, can set a Cookie header explicitly, and necko will not replace it. Stored cookies will be merged with the explicitly set header, in a way that the explicit header will override the stored cookies.
New End user Features
---------------------

### User Experience

* **Faster browser navigation** with improvements to back and forward button performance.
* **Drag and drop reordering for browser tabs.**
* **Answers.com is added to the search engine list** for dictionary lookup.
* **Improvements to product usability** including descriptive error pages, redesigned options menu, RSS discovery, and "Safe Mode" experience.
* **Better accessibility support** including DHTML accessibility.
* **Report a broken website wizard** to report websites that are not working in Firefox.
* **Better support for Mac OS X** (10.2 and greater) including profile migration from Safari and Mac Internet Explorer.
### Security and Privacy

* **Automated update** to streamline product upgrades. Notification of an update is more prominent, and updates to Firefox may now be half a megabyte or smaller. Updating extensions has also improved.
* **Improvements to popup blocking.**
* **Clear Private Data** feature provides an easy way to quickly remove personal data through a menu item or keyboard shortcut.
### Support for open Web standards

Firefox support for Web standards continues to lead the industry with consistent cross-platform implementations for:

* Hypertext Markup Language (HTML) and Extensible Hypertext Markup Language (XHTML): HTML 4.01 and XHTML 1.0/1.1
* Cascading Style Sheets (CSS): CSS Level 1, CSS Level 2 and parts of CSS Level 3
* Document Object Model (DOM): DOM Level 1, DOM Level 2 and parts of DOM Level 3
* Mathematical Markup Language: MathML Version 2.0
* Extensible Markup Language (XML): XML 1.0, Namespaces in XML, Associating Style Sheets with XML Documents 1.0, Fragment Identifier for XML
* XSL Transformations (XSLT): XSLT 1.0
* XML Path Language (XPath): XPath 1.0
* Resource Description Framework (RDF): RDF
* Simple Object Access Protocol (SOAP): SOAP 1.1
* JavaScript 1.6, based on ECMA-262, revision 3

Firefox 1.5 supports the following data transport protocols (HTTP, FTP, SSL, TLS, and others), multilingual character data (Unicode), graphics (GIF, JPEG, PNG, SVG, and others) and the latest version of the world's most popular scripting language, JavaScript 1.6.

Changes since Firefox 1.0
-------------------------

Many changes have been introduced into Firefox since it was first released on November 9, 2004. Firefox has progressed with many new features and bug fixes. A detailed list of changes is available from squarefree.com.


Firefox 33 for developers - Mozilla

Firefox 33 for developers
=========================

Firefox 33 was released on October 14, 2014. 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

* Event listeners popup
* @media sidebar
* Add new rule
* Edit keyframes
* Cubic bezier editor
* Transform highlighter
* Persistent disable cache
* New Commands
* Editor preferences
* WebIDE

For details please see the hacks post. Special thanks to the 33 contributors that added all the features and fixes in this release.

### CSS

* Implemented `@counter-style` rule (Firefox bug 966166).
* Unprefixed `ethiopic-numeric`, `persian`, `arabic-indic`, `devanagari`, `bengali`, `gurmukhi`, `gujarati`, `oriya`, `tamil`, `telugu`, `kannada`, `malayalam`, `thai`, `lao`, `myanmar`, `khmer`, `cjk-heavenly-stem`, `cjk-earthly-branch` in `list-style-type` (Firefox bug 985825 and Firefox bug 1063856).
* Added support for `mongolian`, `disclosure-open` and `disclosure-closed` counter styles in `list-style-type` (Firefox bug 982355 and Firefox bug 1063856).
* Fixed CSS animations with empty keyframes rule so they also dispatch events (Firefox bug 1004377).
* Added support for `rebeccapurple`, a new `<color>` name defined in CSS Colors level 4 (Firefox bug 1024642).
* Our experimental implementation of CSS Fonts Level 3 is progressing. Its activation is governed by the `layout.css.font-features.enabled` preference, enabled by default in Nightly. Newly implemented features are:
    + The fallback algorithm of `font-variant-caps`, creating synthetic alternates for missing glyphs (Firefox bug 961558).
    + The `font-synthesis` CSS property has been implemented (Firefox bug 871453).
### HTML

* Added the experimental support for `<picture>` element (Firefox bug 870022), behind the `dom.image.picture.enabled` preference (off by default).
* The `<label>`, especially without a `for` attribute, doesn't apply anymore to a `<input type=hidden>` field (Firefox bug 597650). The previous behavior wasn't spec-compliant.
* The link annotation `noreferrer` has been implemented on `<a>` elements. `<a rel="noreferrer">` will not include the URL of the referrer in the HTTP request sent to fetch it (Firefox bug 530396). Note that this works only for in-page links, not for links clicked via the UI, like via contextual menus.
* On Android, support for two new values for the `name` attribute of `<meta>` has been added: `msapplication-TileImage` and `msapplication-TileColor` (Firefox bug 1014712). Example:

```html
<meta name="msapplication-TileImage" content="images/benthepcguy-144.png" />
<meta name="msapplication-TileColor" content="#d83434" />
```

### JavaScript

* The non-standard method `Number.toInteger()` has been removed (Firefox bug 1022396).
* The `Map.prototype.set()`, `WeakMap.prototype.set()` and `Set.prototype.add()` methods are now chainable, return their equivalent objects and no longer `undefined` (Firefox bug 1031632).
* A default parameter is evaluated before function declarations inside the function body, so those functions cannot be referred from the default parameter (Firefox bug 1022962).
* Shorthand properties are now allowed in object literals: if not explicitly defined, property keys are initialized by variables of the same name. E.g. `function f(x, y) { return {x, y}; }` is equivalent to `function f(x, y) { return {x: x, y: y}; }` (Firefox bug 875002).
* The parsing of `yield` and `yield*` has been updated to conform with the latest ES2015 specification (Firefox bug 981599).
* The non-standard `hasOwn` trap has been removed (Firefox bug 980565).
### Interfaces/APIs/DOM

* The `RadioNodeList` API has been implemented and the selected radio button is accessible via `RadioNodeList.value` (Firefox bug 779723).
* The `DOMMatrix` has been added (Firefox bug 1018497).
* A non-standard (but implemented in other browsers) `DOMException.stack` property has been added. It returns a string with a human-friendly formatted stack (Firefox bug 857648), in the same format as the existing non-standard `Error.stack` property.
* For `<canvas>`, the method `CanvasPattern.setTransform()`, allowing to modify a pattern using the `DOMMatrix` representation of a linear transform (Firefox bug 1019257).
* Our experimental implementation of Media Source Extensions, behind the `media.mediasource.enabled` preference, enabled by default in Nightly and Aurora only, now supports MP4 (Firefox bug 1000686).
* The properties `HTMLMediaElement.audioTracks` and `HTMLMediaElement.videoTracks` have been experimentally implemented. They are controlled by the `media.track.enabled`, off by default (Firefox bug 744896).
* The non-standard `XMLHttpRequest.mozBackgroundRequest()` is no more accessible from websites. Only Firefox-internal code (Chrome code) can use it (Firefox bug 1035242).
* The `touchenter` and `touchleave` events, removed from the specification, have been removed (Firefox bug 1036444).
* The formerly called `loaded` event, sent on a `HTMLTrackElement` has been renamed `load` to match the specification (Firefox bug 1035505).
* The IndexedDB interface `FileHandle` has been renamed in `IDBMutableFile` (Firefox bug 1006485).
* The IndexedDB interface `LockedFile` has been renamed in `IDBFileHandle` (Firefox bug 1006485).
* The `ServiceWorker` interface has been implemented behind the `dom.serviceWorkers.enabled` flag (Firefox bug 903441).
* The `NetworkInformation.type` now also support the `"unknown"` value (Firefox bug 1023029).
### MathML

* The attributes `columnspacing`, `framespacing`, and `rowspacing` of the `<mtable>` element are now supported (Firefox bug 330964).
* Use Open Type MATH constants for fractions, stacks, radicals, and scripts (Firefox bug 961365).
### SVG

*No change.*

### Audio/Video/WebRTC

* The `RTCOfferOptions` dictionary, used to provide options when calling `RTCPeerConnection.createOffer()`, has been implemented.
### WebGL

* `EXT_blend_minmax` is now exposed. It extends blending capabilities by adding two new blend equations: producing the minimum or maximum color components of the source and destination colors (Firefox bug 973815).
Security
--------

* The CSP 1.1 `frame-ancestors` directive is now supported (Firefox bug 846978).
Changes for add-on and Mozilla developers
-----------------------------------------

* The JavaScript Debugger Service (JSD) has been removed in favor of the new Debugger API (Firefox bug 800200).
* The interface nsIX509CertDB2 has been removed and the methods from that interface have been moved to the nsIX509CertDB interface.
### Add-on SDK

#### Highlights

* Added support for context menus in panels via a new option in the `Panel` constructor.
* Added `tab.readyState`.
* Added a `BrowserWindow` parameter to `sidebar.show()` and `sidebar.hide()`, to control the window for which the sidebar will be shown or hidden.

#### Details

GitHub commits made between Firefox 32 and Firefox 33. This will not include any uplifts made after this release entered Aurora.

Bugs fixed between Firefox 32 and Firefox 33. This will not include any uplifts made after this release entered Aurora.

### Older versions

* 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
* 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


Firefox 51 for developers - Mozilla

Firefox 51 for developers
=========================

To test the latest developer features of Firefox, install Firefox Developer EditionFirefox 51 was released on January 24, 2017. 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
--------------------------

### HTML

* `<hr>` elements can now be used as separators in `<menu>` elements (Firefox bug 870388).
* The `<input>` and `<textarea>` elements' `selectionStart` and `selectionEnd` attributes now correctly return the current position of the text input cursor when there's no selection, instead of returning 0 (Firefox bug 1287655).
### CSS

* Implemented `:indeterminate` for <input type="radio"> (Firefox bug 885359).
* Implemented `:placeholder-shown` for `<input type="text">` (Firefox bug 1069015).
* The `::placeholder` pseudo-element is now unprefixed (Firefox bug 1069012).
* Fixed the `:valid` CSS pseudo-class which didn't match valid `<form>` elements (Firefox bug 1285425).
* The `plaintext` value of `unicode-bidi` now also works with vertical writing modes (Firefox bug 1302734).
* The `fill-box` and `stroke-box` values of `clip-path` are now properly supported; previously, they were aliases of `border-box` (Firefox bug 1289011).
* Clamp flex line's height (clamping stretched flex items), in single-line auto-height flex container w/ max-height (spec change) (Firefox bug 1000957).
### JavaScript

* The ES2015 `Symbol.toStringTag` property has been implemented (Firefox bug 1114580).
* The ES2015 `TypedArray.prototype.toString()` and `TypedArray.prototype.toLocaleString()` methods have been implemented (Firefox bug 1121938).
* The `DateTimeFormat.prototype.formatToParts()` method is now available (Firefox bug 1289340).
* `const` and `let` are now fully ES2015-compliant (Firefox bug 950547).
* Using `const` in `for...of` loops now has a fresh binding for each iteration and no longer throws a `SyntaxError` (Firefox bug 1101653).
* The deprecated for each...in loop now presents a warning in the console (Firefox bug 1293205). Please migrate your code to use the standardized `for...of` loop.
* Generator functions can't have a label anymore and "`let`" as a label name is disallowed now (Firefox bug 1288459).
* Deprecated legacy generator functions will now throw when used in method definitions (Firefox bug 1199296).
* The `next()` method of the iterator protocol will now throw a `TypeError` if the returned value is not an object (Firefox bug 1016936).
* Child-indexed pseudo-class selectors should match without a parent (Firefox bug 1300374).
### Developer Tools

* Network Monitor now shows a "Blocked" state for network requests.
* All devtools bugs fixed between Firefox 50 and Firefox 51.
### WebGL

* WebGL 2 is now enabled by default. See webglsamples.org/WebGL2Samples for a few demos.
    + WebGL 2 provides the `WebGL2RenderingContext` interface that brings OpenGL ES 3.0 to the `<canvas>` element.
    + New features include:
        - 3D textures,
        - Sampler objects,
        - Uniform Buffer objects,
        - Sync objects,
        - Query objects,
        - Transform Feedback objects,
        - Promoted extensions that are now core to WebGL 2: Vertex Array objects, instancing, multiple render targets, fragment depth.
* The `WEBGL_compressed_texture_es3` extension (implemented in Firefox 46) has been renamed to `WEBGL_compressed_texture_etc` (Firefox bug 1316778) and is no longer included by default in WebGL 2 contexts (Firefox bug 1306174).
* The `EXT_disjoint_timer_query` extension has been updated to use `WebGLQuery` objects instead of `WebGLTimerQuery` objects (Firefox bug 1308057).
* The `OES_vertex_array_object` extension now uses the WebGL 2 `WebGLVertexArrayObject` object instead of its own `WebGLVertexArrayObjectOES` object (Firefox bug 1318523).
* You can now use `ImageBitmap` objects as a sources for texture images in methods like `WebGLRenderingContext.texImage2D()`, `WebGLRenderingContext.texSubImage2D()`, `WebGL2RenderingContext.texImage3D()`, or `WebGL2RenderingContext.texSubImage3D()` (Firefox bug 1324924).
### IndexedDB v2

* IndexedDB version 2 implementation is now complete:
    + Supports for the new `IDBObjectStore.getKey()` method has been added (Firefox bug 1271506).
    + Supports for `IDBCursor.continuePrimaryKey()` method has been added (Firefox bug 1271505).
    + Binary keys are now supported (Firefox bug 1271500).
    + See also "What's new in IndexedDB 2.0?" – Mozilla hacks
### Canvas

* The non-standard `CanvasRenderingContext2D.mozFillRule()` method has been removed; the fill rule can be defined using a parameter of the standard `CanvasRenderingContext2D.fill()` method (Firefox bug 826619).
* The `CanvasRenderingContext2D.imageSmoothingEnabled` has been unprefixed (Firefox bug 768072)
### SVG

* Added `tabindex` attribute (Firefox bug 778654).
* Added `href` attribute, which renders `xlink:href` obsolete (Firefox bug 1245751).
* You can now use custom data attributes on SVG elements through the `HTMLElement.dataset` property and the `data-\*` set of SVG attributes (Firefox bug 921834).
* CSS Animations used in an SVG image which is presented in an `<img>` element now work again; this was an old regression (Firefox bug 1190881).
### Web Workers

* The non-standard and obsolete `DedicatedWorkerGlobalScope.close` event handler and `Worker` use of the `close` event have been removed from Firefox.
### Networking

* Scripts served with an `image/*`, `video/*`, `audio/*` or `text/csv` MIME type are now blocked and are not loaded or executed. This happen when they are declared using `<script>`, or loaded via `Worker.importScripts()`, `Worker()`, `SharedWorker()` (Firefox bug 1229267 and Firefox bug 1288361).
* Support for SHA-1 certificates from publicly-trusted certificate authorities has been removed (Firefox bug 1302140). See also Phasing Out SHA-1 on the Public Web for more information.
* New WoSign and StartCom certificates will no longer be accepted (Firefox bug 1309707), see Distrusting New WoSign and StartCom Certificates for more information.
* The PAC `FindProxyForURL(url, host)` function now strips paths and queries from https:// URLs to avoid information leakage (see Firefox bug 1255474, Sniffing HTTPS URLS with malicious PAC files, or `CVE-2017-5384`).
### XHR

* The `XMLHttpRequest.responseXML` property no longer returns a partial `Document` with a <parsererror> node placed at the top when a parse error occurs attempting to interpret the received data. Instead, it correctly returns `null` (Firefox bug 289714).
* To match the latest specification an `XMLHttpRequest` without an `Accept` header set with `setRequestHeader()` is now sent with such a header, with its value set to `*/*` (Firefox bug 918752).
* Fixed `XMLHttpRequest.open()` so that, when omitted, the `username` and `password` parameters now default to `null`, per the specification (Firefox bug 933759).
### WebRTC

* The `RTCPeerConnection.removeStream()` method has been removed. It was deprecated back in Firefox 22, and has been throwing a `NotSupportedError` `DOMException` for a long time. You need to use `RTCPeerConnection.removeTrack()` instead, for each track on the stream.
* WebRTC now supports the VP9 codec by default. When added in Firefox 46, VP9 was disabled by default, but when enabled was the preferred codec; however, it has been moved to be the second choice (after VP8) due to its current level of CPU usage.
* The method `HTMLMediaElement.captureStream()`, which returns a `MediaStream` containing the content of the specified `<video>` or `<audio>`. It's worth noting that this is prefixed still as `mozCaptureStream()`, and that it doesn't yet exactly match the spec.
### Audio/video

* Added FLAC support (FLAC codec) in both FLAC and Ogg containers (Firefox bug 1195723). Supported FLAC MIME types are: `audio/flac` and `audio/x-flac`. For FLAC in Ogg, supported MIME types are: `audio/ogg; codecs=flac`, and `video/ogg; codecs=flac`.
* Added support for FLAC in MP4 (both with and without MSE) (Firefox bug 1303888).
* Throttling in background tabs of timers created by `setInterval()` and `setTimeout()` was changed in Firefox 50 to no longer occur if a Web Audio API `AudioContext` is actively playing sound. However, this didn't resolve all scenarios in which timing-sensitive audio playback (such as music players generating individual notes using timers) could fail to work properly. For that reason, Firefox 51 no longer throttles background tabs which have an `AudioContext`, even if it's not currently playing sound.
### DOM

* The `DOMImplementation.hasFeature()` now returns `true` in all cases (Firefox bug 984778).
* The `HTMLInputElement` and `HTMLTextAreaElement` properties `selectionStart` and `selectionEnd` now correctly return the current position of the text input cursor when there's no selection, instead of returning 0 (Firefox bug 1287655).
* The `HTMLImageElement` interface and the corresponding `<img>` element now support the `onerror` event handler, sending `error` events to the element whenever errors occur attempting to load or interpret images.
* You can now change a Web `Animation`'s effect by setting the value of its `effect` property. Previously, this property was read-only (Firefox bug 1049975).
* The Permissions API method `Permissions.revoke()` has been put behind a preference (`dom.permissions.revoke.enable`) and disabled by default since its design and even its very existence is under discussion in the Web Application Security Working Group.
* The Storage API's `Navigator.storage` property and `StorageManager.estimate()` method have been implemented along with the needed supporting code. Storage unit persistence features are not yet implemented. See Firefox bug 1267941.
* For privacy reasons, both `BatteryManager.chargingTime` and `BatteryManager.dischargingTime` now round the returned value to the closest 15 minutes (Firefox bug 1292655).
### Events

* Firefox now supports the `onanimationstart`, `onanimationiteration`, and `onanimationstart` event handlers, in addition to supporting the corresponding events using `addEventListener()` (Firefox bug 911987).
* Firefox now supports the `ontransitionend` event handler (Firefox bug 911987).
### Security

* When login pages (i.e., those containing an `<input type="password">` field) are created so that they would be submitted insecurely, Firefox displays a crossed-out lock icon in the address bar to warn users (Firefox bug 1319119). See Insecure passwords for more details.
### Removals

* The non-standard Simple Push API, mainly intended for use with Firefox OS and now superseded by the W3C Push API, has been completely removed from Gecko (Firefox bug 1296579).
* The non-standard Alarms API, mainly intended for use with Firefox OS, has been completely removed from Gecko (Firefox bug 1300884).
* Support for prefixes in the Page Visibility API has been removed (Firefox bug 812701).
Changes for add-on and Mozilla developers
-----------------------------------------

### WebExtensions

* New APIs:
    + `idle.queryState()` (Firefox bug 1299846)
    + `idle.onStateChanged` (Firefox bug 1299775)
    + `management.getSelf()` (Firefox bug 1283116)
    + `management.uninstallSelf()` (Firefox bug 1220136)
    + `runtime.getBrowserInfo()` (Firefox bug 1268399)
    + `runtime.reload()` and `runtime.onUpdateAvailable()` (Firefox bug 1279012)
* You can now embed a WebExtension in a legacy add-on type (Firefox bug 1252215).
* Clipboard access is now supported (Firefox bug 1197451)
* The arguments passed to the callback of `tabs.executeScript()` have been fixed (Firefox bug 1290157)
* localStorage is now cleared when a WebExtension is uninstalled (Firefox bug 1213990)
* A changed `Content-Type` header in Web Extensions is now taken into account (Firefox bug 1304331)
### Other

* The `multiprocessCompatible` property of `install.rdf` must now be explicitly set to `false` to prevent multiprocess from being enabled in Firefox when the add-on is installed.
* The Mozilla-specific Social API has been substantially changed (largely to remove APIs no longer used), as follows:
    + The `MozSocial` interface and the `navigator.mozSocial` property which supports it have been removed.
    + The Social Bookmarks API has been removed.
    + The Social chat functionality has been removed.
    + The Social Status API has been removed.
    + All of the social widgets, except for the Share panel, have been removed. This includes the social sidebar, flyover panels, and so forth.
    + All supporting user interface features and functionality for the removed APIs have been removed as well.
    + Social service provider manifest properties supporting the removed functionality are no longer supported.
* If an add-on uses `mimeTypes.rdf` to provide a file extension to MIME type mapping, it must now register an entry in the `"ext-to-type-mapping"` category (Firefox bug 306471).
* The Browser API now includes a `detail` object on the event object of the `mozbrowserlocationchange` event that contains `canGoForward`/`canGoBack` properties, allowing retrieval of the mozBrowser's back/forward status synchronously (Firefox bug 1279635).
Older versions
--------------

* 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
* 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