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


  • Added support for the <details> and <summary> elements (bug 1226455).
  • The pattern attribute of the <input> element now uses the 'u' parameter in the underlying JavaScript RegExp (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" (bug 1269712).
  • The <iframe> element's sandbox attribute now supports the 'allow-popups-to-escape-sandbox' and 'allow-modals' values (bug 1190641).
  • Support for microdata attributes and the Microdata API have been removed (bug 909633).
  • The referrerpolicy attribute on the <a> element now supports the 'no-referrer-when-downgrade' and 'origin-when-cross-origin' (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) (bug 1268852).





  • The method DOMTokenList.supports() has been added (bug 1257849).
  • The DOMTokenList.replace() method has been added (bug 1224186).
  • Leading '?' characters are now ignored in the parameter of the URLSearchParams() constructor (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: (bug 1270451).
  • In prerendering mode, the Document.visibilityState property now returns 'prerender' (bug 1069772).
  • The Window.isSecureContext property has been implemented (bug 1162772).
  • The DOM4 ChildNode.before(), ChildNode.after(), ChildNode.replaceWith(), ParentNode.append() and ParentNode.prepend() methods have been implemented (bug 911477).
  • The TouchList.identifiedTouch() method has been removed (bug 1188539).
  • By default, the scrollbars Window feature is enabled when calling In the past, while it was strongly recommended to enable it, it wasn't the default (bug 1257887).
  • Added the experimental and non-standard HTMLMediaElement.seekToNextFrame() method, which allows seeking frame-by-frame through video content (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 (bug 1268852).
  • Support for the third parameter of EventTarget.addEventListener(), either a Boolean or an EventListenerOptions has been added (bug 1266164 and 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 (bug 1272578). See "Code values" in KeyboardEvent.code 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 (bug 1272599). See "Code values" in KeyboardEvent.code for a full list of available key codes.
  • The key values "Separator" and "MediaSkip" have been removed, as they were deprecated and unused (bug 1232919).
  • Key values and the corresponding key codes "Hyper" and "Super" have been added to represent these legacy modifier keys (bug 1232919).
  • Two key values for multimedia numeric keypad keys have been added: "Key11" and "Key12" (bug 1232919).
  • The following new key values have been added for audio control keys: "AudioBassBoostToggle", "AudioTrebleDown", and "AudioTrebleUp" (bug 123919).
  • Key values have been added for these microphone control keys: "MicrophoneToggle", "MicrophoneVolumeDown", "MicrophoneVolumeUp", and "MicrophoneVolumeMute" (bug 123919).
  • New key values have been added to support speech recognition devices: "SpeechCorrectionList" and "SpeechInputToggle" (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" (bug 1232919).
  • These new application key values have been added: "LaunchContacts" and "LaunchPhone" (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" (bug 1232919).
  • The key value "MediaSelect" has been replaced with the standard "LaunchMediaPlayer" key value (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" (bug 1232919).




  • 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 (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 (bug 1266821). With this dictionary removed, Firefox now simply 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 (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 (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 (bug 1208390).


  • 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 (bug 1271669).

New APIs



No change.



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 elminating 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 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.



  • 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 (bug 1251332).



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

Changes for add-on and Mozilla developers


  • 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().



No change.

See also

Older versions

Document Tags and Contributors

 Last updated by: Sebastianz,