Firefox 50, based on Gecko 50, will ship in November 2016. This article provides information about the changes in this release that will affect developers. Nightly builds of what will become Firefox 50 are currently available on the Beta channel.
Note: Items listed here are tentatively slated for Firefox 50; however, they may be held for a future release if testing shows they're not ready by the time Firefox 50 is due to ship. Please keep an eye on this page to stay up to date on the plans for Firefox 50.
Changes for Web developers
HTML
- The default style of
<bdo>
now setsunicode-bidi
with theisolate-override
value (bug 1249497). - Setting the
<track>
element'ssrc
attribute now works correctly (bug 1281418). - The
referrerpolicy
attribute on<area>
,<a>
,<img>
,<iframe>
and<link>
elements is now available by default (bug 1223838, bug 1264165).
CSS
- Border-radiused corners with dashed and dotted styles are now rendered with the specified style instead of a solid style (bug 382721).
- The non-standard
:-moz-full-screen-ancestor
pseudo-class selector has been removed (bug 1199529). - The
box-sizing
: padding-box
has been removed, since it’s no longer a part of the spec and Firefox was the only major browser implementing it (bug 1166728). - The three values
isolate
,isolate-override
, andplaintext
of theunicode-bidi
property have been unprefixed (bug 1141895). - In quirks mode, the bullet of a list item now inherits the size of the list, like in standards mode (bug 648331).
- The
:in-range
and:out-of-range
pseudo-classes have changed behavior to not match disabled or read-only inputs (bug 1264157). - The
:any-link
pseudo-class is now unprefixed (bug 843579). - The
space
value forborder-image-repeat
has been implemented (bug 720531).
JavaScript
- The ES2015
Symbol.hasInstance
property has been implemented (bug 1054906). - The ES2017
Object.getOwnPropertyDescriptors()
method has been implemented (bug 1245024). - The behavior of \W in
RegExp
with unicode and ignoreCase flags is changed to match recent draft spec. Now it doesn't match to K, S, k, s, and KELVIN SIGN (U+212A), and LATIN SMALL LETTER LONG S (U+017F) (bug 1281739).
Developer Tools
- The box model panel was moved into the Computed side panel (bug 1247729).
HTTP
- The experimental (and deprecated) SPDY 3.1 is now disabled by default bug 1287132.
- Support for
X-Content-Type-Options
has been added (bug 471020). - The cookie prefixes
__Host-
and__Secure-
have been implemented. SeeSet-Cookie
and bug 1283368. - The
Referrer-Policy
header has been implemented bug 1264164.
Security
- The
ping
attribute of<a>
element now abides by theconnect-src
CSP 1.1 policy directive (bug 1100181). - Support for the
sandbox
CSP directive has been added (bug 671389). - It's now possible to set a content security policy for workers (bug 959388).
- The
Navigator.sendBeacon()
method no longer throws an exception if the beacon data couldn't be sent due to a Content Security Policy restriction; instead, it returnsfalse
as expected (bug 1234813).
Networking
- When a error has happened during an asynchronous
XMLHttpRequest
, theXMLHttpRequest.getAllResponseHeaders()
method now returns an empty string (bug 1286744). - Instead of returning a
NetworkError
, asynchronousXMLHttpRequest
that fails for CORS or other network constraints now raises anerror
that can be catched like any other error (bug 709991). XMLHttpRequest.getResponseHeader()
andXMLHttpRequest.getAllResponseHeaders()
now also return empty headers by default. This can be controlled via the preferencenetwork.http.keep_empty_response_headers_as_empty_string
(bug 918721).- The
only-if-cached
option has been added toRequest.cache
(bug 1272436).
DOM
- The
once
option forEventTarget.addEventListener()
is now supported (bug 1287706). - The interface
NodeList
are now iterable and the methodsforEach()
,values()
,NodeList.entries()
andNodeList.keys()
are now available (bug 1290636). - The interface
DOMTokenList
are now iterable and the methodsforEach()
,values()
,DOMTokenList.entries()
andDOMTokenList.keys()
are now available (bug 1290636). - The methods
Document.createElement()
andDocument.createElementNS()
now have an optionaloptions
parameter for creating custom elements (bug 1276579).
SVG
- The
allowReorder
attribute has been dropped and the behavior it was setting is now the default for SVG<switch>
elements (bug 1279690). - The
defer
keyword for thepreserveAspectRatio
attribute on SVG<image>
elements has been removed to follow the latest SVG2 specification (bug 1280425).
Drag and Drop API
- The
DataTransfer.items
property has been implemented, allowing access to multiple items being dragged and dropped using the HTML Drag and Drop API. To allow this, theDataTransferItem
andDataTransferItemList
interfaces are now supported as well (bug 906420). This is enabled by default. - The old, obsolete Firefox specific drag and drop API events
dragdrop
anddraggesture
are no longer supported. Be sure to update any code still using them to use the HTML drag and drop API (bug 1162050.
Pointer Lock API
- The Pointer Lock API is now unprefixed (bug 991899).
- Before Firefox 50,
requestPointerLock()
asked for permission using a doorhanger, and pointer lock would not be enabled until the user granted permission. From Firefox 50, pointer lock is like the fullscreen API: it's granted immediately, but a notification is displayed explaining to the user how to exit (bug 1273351).
IndexedDB
- A
close
event is now sent to theIDBDatabase
object when the corresponding database is unexpectedly closed (bug 1151017).
Service Workers
- The
WindowClient.navigate()
method has been implemented. This method lets you open a specified URL into a client window which is being controlled by the service worker (bug 1218148).
WebGL
- The
EXT_shader_texture_lod
WebGL extension has been implemented (bug 1111689). - The texImage methods have been updated for WebGL 2 to implement PBOs (
PIXEL_UNPACK_BUFFER
) (bug 1280499).
WebRTC
- Adding a track to a
MediaStream
now generates theaddtrack
event as described in the specification. The event is of typeMediaStreamTrackEvent
and is fired on the stream to which the track was added. You can use eitherMediaStream.addEventListener('addtrack', ...)
or theMediaStream.onaddtrack
property to handle"addtrack"
events. - The
MediaStreamTrack
interface now supports theended
event and theMediaStreamTrack.onended
event handler. - Firefox now supports the
MediaStreamTrack.readyState
property, which indicates whether the track is live or permanently ended. - The
MediaStreamTrack
methodsgetConstraints()
andgetSettings()
have been implemented; these let you get the most recently applied set of customized property constraints and the actual values of all of the track's constrainable properties, respectively. The accompanying data types have been documented as well. - The
RTCDataChannel.stream
property has been removed. This was replaced withRTCDataChannel.id
in Firefox 24, but was supported for backward compatibility. Please be sure to update your code to use theid
property if you haven't done so yet.
Web Audio API
- The
PannerNode
interface now supports the 3D Cartesian space properties for the position (PannerNode.positionX
,PannerNode.positionY
, andPannerNode.positionZ
) and directionality (PannerNode.orientationX
,PannerNode.orientationY
,PannerNode.orientationZ
) of an audio source. - The interface
IIRFilterNode
, which implements a general infinite impulse response (IIR) filter, has been implemented. - Throttling in background tabs of timers created by
Window.setInterval()
andWindow.setTimeout()
no longer occurs if a Web Audio APIAudioContext
is actively playing sound. This should help prevent issues with timing-sensitive audio playback (such as music players generating individual notes using timers) in the background (bug 1181073).
Audio/Video
- The
AlignSetting
enum (representing possible values forVTTCue.align
) incorrectly previously included the value"middle"
instead of"center"
. This has been corrected (bug 1276130). - The non-standard and experimental method
HTMLMediaElement.seekToNextFrame()
now seeks to the next frame in the media asynchronously, rather than synchronously, and returns aPromise
which resolves once the seek is complete. - The implementation of
HTMLTrackElement
has been corrected to allow<track>
elements to load resources even if not in a document (bug 871747).
Battery API
- The
navigator.battery
property, which has been deprecated since Firefox 43, is now obsolete and has been removed. Use thenavigator.getBattery()
method instead to get a batteryPromise
, which will resolve when theBatteryManager
is available for use; theBatteryManager
is passed into the fulfillment handler for the promise (bug 12593355).
Files and directories
- A subset of the File and Directory Entries API has been implemented, to improve compatibility with sites that were previously only compatible with Google Chrome (bug 1265767).
- The asynchronous API interfaces have been implemented, with the caveat that only reading of files is supported; for example, the
FileSystemFileEntry.createWriter()
method is a no-op. - These interfaces have been implemented:
FileSystem
FileSystemEntry
(properties only; the methods have not been implemented)FileSystemFileEntry
(except forcreateWriter()
)FileSystemDirectoryEntry
(except forremoveRecursively()
)FileSystemDirectoryReader
HTMLInputElement.webkitdirectory
as well as thewebkitdirectory
attribute of the<input>
element have been implemented; this lets you configure a file input to accept directories instead of files (bug 1258489).HTMLInputElement.webkitEntries
has been implemented; this returns an array ofFileSystemEntry
-based objects representing the selected items.File.webkitRelativePath
has been implemented; this contains the path of the file relative to the root of the containingFileSystemDirectoryEntry
that was among the items in the list returned byHTMLInputElement.webkitGetEntries()
.- See File and Directory Entries API support in Firefox for details about what we do and do not support in this API.
- These APIs are now enabled by default; some were previously available but only behind a preference (bug 1288683).
- The asynchronous API interfaces have been implemented, with the caveat that only reading of files is supported; for example, the
- We've implemented
DataTransferItem.webkitGetAsEntry()
as part of the File and Directory Entries API; this lets you obtain aFileSystemEntry
representing a dropped file (bug 1289255). This is enabled by default. - The
HTMLInputElement.directory
property, part of the Directory Upload API proposal, has been renamed toallowdirs
(bug 1288681). This property is hidden behind a preference.
See also
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
Document Tags and Contributors
Tags:
Contributors to this page:
fscholz,
teoli,
wbamberg,
Sheppy,
Sebastianz,
yisibl,
chrisdavidmills,
arai
Last updated by:
fscholz,