Firefox 21 for developers

Firefox 21 was released on May 14, 2013. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.

Changes for Web developers


  • The scoped attribute has been added to the <style> element. It allows to include styles that are isolated from the rest of the document. Such styles can be selected using the :scope CSS pseudo-element introduced in Firefox 20. (Firefox bug 508725).
  • The new HTML <main> element has been implemented (Firefox bug 820508).


  • EcmaScript for XML (E4X), an ancient JavaScript extension, has been removed. Implemented only in Gecko, it never got significant traction (Firefox bug 788293).
  • parseInt no longer treats strings with leading "0" as octal (Firefox bug 786135).





  • We continue to update our CSP implementation to match the CSP 1.0 spec, which reached Candidate Recommendation:
    • Support for the spec-compliant Content-Security-Policy HTTP header (in addition to the experimental X-Content-Security-Policy) has been added (Firefox bug 783049).

      Note: the patch for this new header landed in Firefox 21, it is disabled on builds (Firefox bug 842657).


Changes for add-on and Mozilla developers

  • FUEL applications cannot use the Livemarks service anymore (Firefox bug 834492). The Livemarks service is deprecated and phased out in favor of the new async interface.
  • resource:///modules/ and resource://gre/modules/ are no longer identical (Firefox bug 755724). This change was made because of work on the metro version of Firefox. If you load modules using resource:///modules/, you should check if you now want to use resource://gre/modules/ instead. Note that some modules also moved from Firefox to Toolkit (Firefox bug 840287 and Firefox bug 811548 moved NewTabUtils.jsm and the thumbnail modules, respectively).
  • The Add-on SDK is now included in Firefox (Firefox bug 731779)
  • History API saw numerous deprecated API being removed:
    • Replaced by mozIAsyncFavicons:
      • nsIFaviconService::setFaviconUrlForPage
      • nsIFaviconService::setFaviconData
      • nsIFaviconService::getFaviconData
      • nsIFaviconService::getFaviconForPage
      • nsIFaviconService::setAndLoadFaviconForPage
      • nsIFaviconService::getFaviconImageForPage
      • nsIFaviconService::getFaviconDataAsDataURL
    • Replaced by mozIAsyncLivemarks:
      • nsILivemarkService::*
      • PlacesUtils.itemIsLivemark
      • PlacesUtils.nodeIsLivemarkContainer
      • PlacesUtils.nodeIsLivemarkItem
    • Removed only third argument:
      • PlacesUIUtils.showBookmarkDialog
    • No more implemented by Places, use mozIAsyncHistory instead:
      • nsIGlobalHistory2::addURI
      • nsIGlobalHistory2::isVisited
      • nsIGlobalHistory2::setPageTitle
    • No more needed, use onDeleteURI or onItemRemoved:
      • nsINavHistoryObserver::OnBeforeDeleteURI
      • nsINavBookmarkObserver::OnBeforeItemRemoved
    • Never implemented properly:
      • nsINavHistoryFullVisitResultNode
    • Deprecated, use mozIAsyncHistory::updatePlaces instead:
      • nsINavHistoryService::AddVisit
  • Added nsIHttpChannel.redirectTo to enable redirecting HTTP channels without fragile hacks.

See also

Older versions