Firefox 20 will be released on April 2nd. Here’s the list of changes that went into this version that can affect add-on compatibility. There is more information available in Firefox 20 for Developers, so you should read that too.
- When doing lazy tab restoration, set the <browser>s in question to display:none. This helps reduce memory consumption by loading as little as possible for tabs that were session-restored but haven’t been selected by the user yet. However, this also means that the content of those tabs will be inaccessible to add-ons. You can check for unloaded tabs using tab.getAttribute(“pending”) or tab.linkedBrowser.getAttribute(“pending”).
- Implement the Downloads Panel. While the Download Manager still exists, this new UI significantly changes the way downloads appear initially.
- Redirects visits are not notified anymore through history observers. This means history observers will get some new unexpected notifications.
Private Browsing Mode is changing to support private and non-private windows opened at the same time. This means that many XPCOM interfaces and other functions are changing to support it.
- Remove the global private browsing service. This removes nsIPrivateBrowsingService for all practical services. The interface is still there for backward compatibility purposes, but it’s completely empty, along with its observer notifications: private-browsing, private-browsing-transition-complete, private-browsing-cancel-vote, private-browsing-change-granted.
- |non editable element|.QueryInterface(Components.interfaces.nsIDOMNSEditableElement) does not throw anymore. If you were using QueryInterface to check for editable elements, this won’t work in 20. While this was fixed in 21 and above, it’s recommended that you use instanceof instead.
- Refactor imgTools::DecodeImageData. This deprecates the decodeImageData function in favor of the new decodeImage function in the same interface.
- Convert XMLSerializer and DOMParser to WebIDL bindings. Removes nsIDOMParserJS. See nsIDOMParser for alternatives.
- Remove support for image-sniffing-services. This removes the image-sniffing-services XPCOM category.
- Move EventSource to Paris bindings. Removes nsIEventSource.
- Context menu is not shown for form buttons and select elements.
- Add a RemoveAllDownloads API to nsIDownloadHistory.
Please let me know in the comments if there’s anything missing or incorrect on these lists. If your add-on breaks on Firefox 20, 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.