This post is long overdue, I apologize for the delay. We ran the Firefox 8 compatibility bump last Friday (August 26th), and while there are still a few bugs to fix in this system, the validation was mostly successful and we automatically upgraded roughly 3000 add-ons.
Here are the add-on compatibility-breaking bugs I identified that have been fixed in Firefox 8, currently in the Aurora track:
- Remove ISO8601DateUtils.jsm. The Date object now supports the capabilities this module provided, so there’s no need for it anymore.
- Remove nsIDOMWindowInternal. This change affected many add-ons, so it was reverted. However, the interface is deprecated and may be removed in the future. We added a compatibility warning explaining that nsIDOMWindow should be used instead.
- document.getSelection() should return the same as getSelection(), not stringification. This changed the return value of document.getSelection so that it matched window.getSelection. Instead of a string, it returns an object now.
- Merge nsISelection* interfaces. A couple of relatively obscure interfaces were merged into nsISelection. The latter should be used instead.
- The implementation of the File API introduced one global called File, which could conflict with objects in your scripts. We learned about this change after the bump, but it would have been very difficult to create a validator check for this anyway. It would’ve been too noisy. If you have globals named File, you should rename them.
- In the same vein, a global named ChromeWorker was introduced. There’s no validation for it, but no add-ons are affected as far as we know. This constructor was introduced instead of the XPCOM interfaces that existed before it, like nsIWorkerFactory. Most of this work is detailed in this bug. We learned about this change after the fact as well, but we don’t expect many add-ons to be affected by it. Please let us know if this affects you.
- Remove SSL 2.0 support. This doesn’t affect any current add-ons, so we didn’t add validation for it. It just means some very old code was removed, as well as these preferences: security.enable_ssl2 (false by default) and security.ssl2.*.
Here are a few other changes that probably interest you but don’t break compatibility as far as we can tell:
- Users should have exclusive control over selecting their add-ons. Third-party add-ons that weren’t installed by the user voluntarily will be disabled when users upgrade to Firefox 8. There will be a dialog where users will be able to choose which add-ons to keep and which add-ons to remove. This somewhat controversial decision has been discussed before.
- Replace binary xpidl xpt output with a python version hooked up to xpidl.py. This is a big change if you compile IDL files for your add-ons. The binary xpidl tool has been replaced with a Python script.
- Allow caching JS loaded with loadSubScript. This will improve the performance of add-ons that dynamically load many scripts. It will be particularly useful for Jetpack-based add-ons, which load a large amount of scripts.
- about:config should support URL query for specific prefs. This is just a nice little shortcut for editing preferences in about:config.
- Save chosen download file name and other metadata in Places history. This is just an addition to Places that might be useful for extension developers.
As always, there’s more detailed information in Firefox 8 for Developers. If there’s anything missing here or in the MDC page, or if you had any problems with the latest compatibility bump, please let us know in the comments.
We’re also streamlining the breaking change detection process, and I posted in the newsgroups about this: Keeping add-ons compatible in the rapid release process. Please have a look and let us know what you think.