Firefox 13 has been in beta for a while now, so this blog post is a bit overdue. Here’s an almost comprehensive list of the changes that went into Firefox 13 that can affect add-on compatibility. There is more information available in Firefox 13 for Developers, so you should read that too.
- New Tab Page. This is a major new feature, but can also break add-ons that overlay about:blank. The good thing is that this feature makes it easier to create a customized new tab page. All you need to do is set the browser.newtab.url preference to the chrome URL you prefer.
- Remove “lateness” argument for setTimeout and setInterval. This was a non-standard feature, where an additional argument was passed to setTimeout and setInterval callback handlers, indicating how late they were being called. For example, if you call setTimeout with a waiting time of 0, the callback will always be called late because there’s a minimum waiting time of a few ms.
- Remove support for globalStorage. window.globalStorage is no more. For local storage alternatives, please read this article.
- Replace livemarks with asynchronous load-on-demand livemarks. nsILivemarkService is now deprecated, in favor of the asynchronous mozIAsyncLivemarks.
- Remove excludeItemsIfParentHasAnnotation query option. This is a query option that could be used on Places queries. It has been dropped now.
- Implement HTML to plain text conversion as a DOM walker. nsIScriptableUnescapeHTML is now deprecated in favor of the new nsIParserUtils.
- Drop support for prefixes from border-radius* and box-shadow. This means you should no longer use -moz-border-radius and -moz-box-shadow. If you do, make sure that you are also using the non-prefixed equivalents.
- Markers in places popup views are broken. This makes some significant changes in how Places popups work internally, so if you overlay or override them, you need to look into this.
- Merge nsIPrefBranch2 with nsIPrefBranch. The very commonly used nsIPrefBranch2 is now deprecated. If you have preference observers, you’re using this interface. It still works as it always has and there are no plans to drop it in the near future. However, it’s best that you begin moving away from it.
- Mandatory ASLR on Windows for binary components. This is very important if you have binary components. My understanding is that the default compile options include ASLR, but you should still verify that your components load correctly. More details in this blog post.
- Merge nsIAccessNode and nsIAccessible. nsIAccessNode no longer exists.
- Remove FileError. nsIDOMFileError no longer exists.
- Add about:compartments page. This makes it much easier to hunt for zombie compartments, which you should always do when testing your add-on. Instead of the very verbose about:memory, the new about:compartments shows a simple list of existing compatments, which is much more easy to follow and understand.
- Allow the source code editor of Scratchpad & StyleEditor to be themed.
- Split -new-instance flag out of existing -no-remote flag. This separates the idea of starting a separate Firefox instance and allowing that instance to receive command-line input after being launched. It might still not be fully finished according to the latest comments.
- Provide internal API to get canvas image data as nsIInputStream. This creates a nice new shortcut for getting image data out of a canvas.
Please let me know in the comments if there’s anything missing or incorrect on these lists. If your add-on breaks on Firefox 13, I’d like to know.
We will be doing an automatic compatibility validation and upgrading for add-ons on AMO that are compatible with Firefox 12, sometime in the next 2 weeks. I’ll also be working in Firefox 14 compatibility so that it doesn’t come in as late as this one.