Firefox 51, based on Gecko 51, will ship in January 2017. This article provides information about the changes in this release that will affect developers. Nightly builds of what will become Firefox 51 are currently available on the Developer Edition channel. Some experimental features whose release dates are uncertain or undecided are discussed on the page Experimental features in Firefox. Some features described there may be available in Firefox 51.
Items listed here are tentatively slated for Firefox 51; however, they may be held for a future release if testing shows they're not ready by the time Firefox 51 is due to ship. Please keep an eye on this page to stay up to date on the plans for Firefox 51.
Changes for Web developers
Developer Tools
All devtools bugs fixed between Firefox 50 and Firefox 51.
HTML
- Firefox 51 now allows you to use the
<hr>element to insert separators in<menu>s, per the specification (bug 870388. - The
<input>and<textarea>elements'selectionStartandselectionEndattributes now correctly return the current position of the text input cursor when there's no selection, instead of returning 0 (bug 1287655).
CSS
- Implemented
inset()value forclip-pathbehind the preferencelayout.css.clip-path-shapes.enabled, defaulting tofalse(bug 1246762). - [css-grid] Implement
fit-content()value for <track-size> (bug 1281320). - [css-grid] Percentage gutters are wrong calculated on grid containers with indefinite sizes (bug 1279182).
- [css-grid] Reject repeat() column tracks in <grid-template> when there's a grid template area string in the row part (bug 1282643).
- [css-grid]
calc()with negative percentage can result in negative track size (bug 1282418). - Implemented
:indeterminatefor <input type="radio"> (bug 885359). - Implemented the
:placeholder-shownpseudo-class on<input type="text">(bug 1069015). - Unprefixed
::placeholderpseudo-element (bug 1069012). - Fix
:validCSS pseudo-class doesn't match valid <form>s (bug 1285425). - Fix initial value for
mask-repeatproperty should beno-repeat, but is implemented asrepeat(bug 1258623). - The
plaintextvalue ofunicode-bidinow also works with vertical writing modes (bug 1302734). - The
fill-boxandstroke-boxvalues ofclip-pathare now properly supported; previously, they wear aliases ofborder-box(bug 1289011).
JavaScript
- The ES2015
Symbol.toStringTagproperty has been implemented (bug 1114580). - The ES2015
TypedArray.prototype.toString()andTypedArray.prototype.toLocaleString()methods have been implemented (bug 1121938). - The
DateTimeFormat.prototype.formatToParts()method is now available (bug 1289340). constandletare now fully ES2015-compliant (bug 950547).- Using
constinfor...ofloops now has a fresh binding for each iteration and no longer throws aSyntaxError(bug 1101653). - The deprecated for each...in loop now presents a warning in the console (bug 1293205). Please migrate your code to use the standardized
for...ofloop. - Generator functions can't have a label anymore and "
let" as a label name is disallowed now (bug 1288459). - Deprecated legacy generator functions will now throw when used in method definitions (bug 1199296).
- The
next()method of the iterator protocol will now throw aTypeErrorif the returned value is not an object (bug 1016936).
Interfaces/APIs/DOM
DOM & HTML DOM
- Throttling in background tabs of timers created by
Window.setInterval()andWindow.setTimeout()was changed in Firefox 50 to no longer occur if a Web Audio APIAudioContextis 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 anAudioContext, even if it's not currently playing sound. - The
XMLHttpRequest.responseXMLproperty no longer returns a partialDocumentwith a <parsererror> node placed at the top when a parse error occurs attempting to interpret the received data. Instead, it correctly returnsnull(bug 289714). - The
DOMImplementation.hasFeature()now returnstruein all cases (bug 984778). - The method
HTMLMediaElement.captureStream(), which returns aMediaStreamcontaining the content of the specified<video>or<audio>. It's worth noting that this is prefixed still asmozCaptureStream(), and that it doesn't yet exactly match the spec. - The
HTMLInputElementand<htmltextareaelement>propertiesselectionStartandselectionEndnow correctly return the current position of the text input cursor when there's no selection, instead of returning 0 (bug 1287655). - The
HTMLImageElementinterface and the corresponding<img>element now support theonerrorevent handler, sendingerrorevents 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 itseffectproperty. Previously, this property was read-only (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.
Canvas
- The non-standard
CanvasRenderingContext2D.mozFillRule() method has been removed; the fill rule can be define by a parameter of the standardCanvasRenderingContext2D.fill()method (bug 826619). - The
CanvasRenderingContext2D.imageSmoothingEnabledhas been unprefixed (bug 768072).
WebGL
No change.
IndexedDB
- Supports for the new
IDBObjectStore.getKey()method has been added (bug 1271506).
Web Workers
- The non-standard and obsolete
WorkerGlobalScope.oncloseevent handler andWorkeruse of thecloseevent have been removed from Firefox.
Service Workers
No change.
WebRTC
- The
RTCPeerConnection.removeStream()method has been removed. It was deprecated back in Firefox 22, and has been throwing aNotSupportedErrorfor a long time. You need to useRTCPeerConnection.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.
New APIs
No change.
Others
- For privacy reasons, both
BatteryManager.chargingTimeandBatteryManager.dischargingTimenow round the returned value to the closest 15 minutes (bug 1292655). - Our implementation of Page Visibility API doesn't accept prefixed version anymore (bug 812701).
MathML
No change.
SVG
- Added
tabindexattribute (bug 778654). - Added
hrefattribute, which rendersxlink:hrefobsolete (bug 1245751). - You can now use custom data attributes on SVG elements through the
SVGElement.datasetproperty and thedata-*set of SVG attributes (bug 921834). - CSS Animations used in an SVG image which is presented in an
<img>element now work again; this was an old regression (bug 1190881).
Audio/video
- Add FLAC support (FLAC codec) in both FLAC and Ogg containers (bug 1195723). Supported FLAC MIME types are:
audio/flacandaudio/x-flac. For FLAC in Ogg, supported MIME types are:audio/ogg; codecs=flac, andvideo/ogg; codecs=flac.
HTTP
No change.
Networking
No change.
Security
No change.
Changes for add-on and Mozilla developers
Interfaces
No change.
XUL
No change.
JavaScript code modules
No change.
XPCOM
No change.
Other
- The Mozilla-specific Social API has been substantially changed (largely to remove APIs no longer used), as follows:
- The
MozSocialinterface and thenavigator.mozSocialproperty 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.
- The
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