Firefox 21 will be released on May 14th. Here’s the list of changes that went into this version that can affect add-on compatibility. There is more information available in Firefox 21 for Developers, so you should read that too.
- Split platform and app resources up so that they can be loaded individually. Adapting Firefox for Metro has lead to some things moving around, including a number of popular JS modules.
- In Firefox 20 and below, resource:///modules/, resource://gre/modules/, and resource://app/modules/ point to the same location.
- In Firefox 21 and above, resource://gre/modules/ and resource://app/modules/ point to different places and have different sets of modules in them. resource:///modules/ points to resource://app/modules/. Most of what you want is in /gre/, though. The easiest way to test is to open Firefox 21 or later and try loading the URLs you use to import the modules. If they still work, you’re good.
- Enable XBL Scopes. If you insert XBL bindings into content pages, calling functions to/from chrome can break under some circumstances and require additional code. You can read the details on the bug.
- Remove ability to set higher JS versions via language attribute. This means you can no longer explicitly set the JS version using the language attribute, even in XUL documents.
- Remove E4X from SpiderMonkey. E4X is no more.
- Give the -moz-orient property an ‘auto’ value, and make it the default.
- Change “-moz-user-select:none” to behave like “-moz-user-select:-moz-none”.
- Make parseInt(“042”) === 42.
- Remove deprecated synchronous APIs from Places. Several synchronous functions have been removed. You can read the first comment in the bug for a list of the changes. This was also previously announced in the newsgroups.
- Remove nsINavHistoryFullVisitResultNode. It’s worth noting this also removed two constants that some add-ons use: nsINavHistoryResultNode.RESULT_TYPE_FULL_VISIT and nsINavHistoryResultNode.RESULT_TYPE_DYNAMIC_CONTAINER.
- Remove deprecated third argument from PlacesUIUtils.showBookmarkDialog.
- Drop livemarks support from FUEL.
- Remove onBeforeDeleteURI and onBeforeItemRemoved.
- Avoid replacing nodes in Places query results and remove nodeReplaced views notification. Removes nsINavHistoryResultObserver.nodeReplaced.
- nsIDownloadManagerUI uses obsolete download id. The optional download ID argument is now an nsIDownload object.
- ContentChild’s nsIConsoleListener should have threadsafe addref/release methods. This change caused bug 852220. In a nutshell, you shouldn’t expect nsIConsoleListener objects to be notified immediately when a message is logged. Removing the listener can result in lost messages.
- Remove expandEntityReferences from NodeIterator and TreeWalker.
- Remove nsSelectionIterator. Removes nsISelectionPrivate.getEnumerator.
- Make language packs restartless by default. Yay!
- Expose secure PRNG in the DOM. window.crypto.getRandomValues will now get you cryptographically random values.
Please let me know in the comments if there’s anything missing or incorrect on these lists. If your add-on breaks on Firefox 21, I’d like to know.
The automatic compatibility validation and upgrade for add-ons on AMO will happen very soon, so check your email if you have an add-on listed on AMO.