Firefox 15 will be released tomorrow (sorry for the late post!). Here’s a list of changes that went into Firefox 15 that can affect add-on compatibility. There is more information available in Firefox 15 for Developers, so you should read that too.
- Remove support for Chrome -> Content leaks. This bug fix has been mentioned repeatedly since it landed on nightly, but is worth highlighting again. References to content DOM elements should not outlive their parent documents. This fix ensures that it happens. If your add-on did this (causing memory leaks in the process), it will no longer work on Firefox 15 and above.
- E4X Deprecation. E4X is on the way out, and you should stop using it on your add-ons. Firefox 16 will disable it in content, and Firefox 17 will remove it from the chrome. There are already some limitations of what you can do with E4X in 15 due to the one global per compartment change, so it’s best that you drop E4X right away.
- Don’t use expando properties for storing data on Places nodes. Some private properties in Places nodes might have been used by add-ons in the past. They are no longer available, so you’ll need to use the public properties or Places API instead.
- DOMStorage should obtain Private Browsing information from related docshell. This changes the signature of the getLocalStorageForPrincipal method, adding a boolean flag for private browsing. The flag is optional, so current consumers shouldn’t be affected.
- Gut unused CAPS code. This can affect add-ons that use enablePrivilege, which hasn’t been allowed on AMO for a long time.
- Support showing multiple popup notification icons at the same time. Theme developers should take note of this change.
- Remove nsIGlobalHistory code. nsIGlobalHistory2 still exists, and it is what should have been used all along. The compatibility validation still flags nsIGlobalHistory2 because it just matches anything with “nsIGlobalHistory” in it, but you shouldn’t worry about that.
- Remove AddPageWithDetails. This removes that function from nsIBrowserHistory. The updatePlaces method in PlacesUtils.asyncHistory can be used instead.
- Remove mozIStorageStatementWrapper and mozIStorageStatement::Step. The wrapper is no longer necessary, so you can use mozIStorageStatement directly. The executeStep() method should be used instead of step().
- Remove nsIBrowserHistory::count. Subject says it all. The count property in nsIBrowserHistory is no longer there. hasHistoryEntries can be used instead. This isn’t included in the compatibility validation because the property name is too generic.
- Support RFC2231/5987 encoding for title parameter. This adds a new parameter to nsIUTF8ConverterService.convertStringToUTF8.
- Remove JSVAL_IS_OBJECT. This only affects binary XPCOM components that use this macro in their code.
- NS_CompareVersions is a confusing API. Another macro change that should only affect binary XPCOM add-ons.
- Support finalization for CData objects. For add-ons that use JS-ctypes to invoke binary libraries, this adds a better way to ensure finalization of open handles. Read this post for more information.
Major Change Coming up in Firefox 16
- Remove support for “java” DOM object. If you use Java in your extension, you’ll probably need to change the approach you use to get to the global java object. You should also consider moving away from Java if possible, given that Java is not well supported for add-ons, and your extension can suffer because of Java plugin blocklisting.
Please let me know in the comments if there’s anything missing or incorrect on these lists. If your add-on breaks on Firefox 15, I’d like to know.
The automatic compatibility validation and upgrade for add-ons on AMO happened last week, so check your email and let me know if you weren’t notified.