The add-on (extension) mechanism built into the Mozilla platform is very powerful. One of the optional features is support for options (preferences) dialogs. As discussed in my last post, Fennec doesn’t like dialogs. In addition, Fennec has a simple, clean preference system. While designing the Fennec Add-ons Manager, we discussed how we would support add-on options. We didn’t want popup dialogs of random and complicated XUL.
After brainstorming a few ideas, we settled on a simple idea. Fennec uses special
XUL tags to create it’s list of preferences. Add-ons would be forced to use the same tags. The options would be merged into the Fennec Add-on Manager, not displayed as a popup dialog. Of course, add-ons can support more than one application, so we needed to make sure that the options XUL for Fennec could coexist with the options XUL for other applications. Let’s take a look at how this all works:
Install Manifest
Add-ons use install.rdf to identify the XUL used for displaying the preferences. This is optional.
This is needed for any add-on that wants to use an options dialog.
Chrome Manifest
Add-ons use the chrome manifest to selectively override XUL, and other resources, between different applications using the application flags
override chrome://myaddon/content/options.xul chrome://myaddon/content/fennec-options.xul application={a23983c0-fd0e-11dc-95ff-0800200c9a66}
This will tell Mozilla to use fennec-options.xul
anytime the options.xul
resource is requested.
Options XUL
As I said, the XUL allowed for the Fennec options system is limited to a few new tags. Here is an example of a Fennec options dialog:
Profiling can affect the performance of the application
Note that we don’t have any support and we are limited to
tags. The root
just acts as a container, it isn't merged into the main window. Here is how the options look in Fennec:
As always, we appreciate your feedback. I'm in the process of updating the Fennec Best Practices documents with this information.
A big thank you goes out to Vivien Nicolas, a Mozilla intern in the Paris office, for turning my super-great design into a reality. Shaver told me there'd be days like this!