Update of Firefox's extension.
Since Firefox 1.5, updating the browser becomes an automatic process. Nice, but... there are compatibility issues with extensions. They have their own roadmap, not necessarily coherent with Firefox evolutions.
Then, a user with a nicely personalised browser may loose, after an update, the use of his browser or some extensions:
- an extension is really not compatible with the new version of Firefox from a code point of view, but this does not appear in the extension meta data and the browser becomes buggy,
- meta data of the extension mention that the extension is not compatible with the update: Firefox can't keep this extension active.
You will find in the following a solution for the later case.
What is a Firefox extension?
Beware: this page is not a complete tutorial (see an extensive documentation [en]), but a short explanation to solve a simple problem.
A Firefox extension is a file with an .xpi suffix. This suffix is recognized by Firefox, but doesn't correspond to a new exotic file format. .xpi is just a ZIP package. Any ZIP compatible tool (try 7-zip if you don't have one) will easily open a Firefox extension.
An .xpi file contains several kinds of file (javascript, HTML, CSS, XML,
jar archive...). Most of the time functional files are grouped in the chrome
directory. Beside this, every extension has to contain the XML file named
install.rdf that set up meta data to describe installation
parameters.
Install.rdf example file
Let's see an example with the Toolbar Enhancements extension in
tbx.xpi file (version 0.16.2 found on the 9th of February 2006).
Once this file opened, we discover this install.rdf:
<?xml version="1.0"?>
<r:RDF xmlns:r="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.mozilla.org/2004/em-rdf#">
<r:Description about="urn:mozilla:install-manifest">
<id>tbx</id>
<name>Toolbar Enhancements</name>
<version>0.16.2</version>
<description>Adds various toolbar buttons and increases toolbar
configurability</description>
<creator>Stephen Clavering</creator>
<homepageURL>http://clav.mozdev.org/</homepageURL>
<updateURL>http://clav.mozdev.org/updates.rdf</updateURL>
<targetApplication>
<r:Description>
<id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</id>
<minVersion>1.0</minVersion>
<maxVersion>1.0</maxVersion>
</r:Description>
</targetApplication>
<file>
<r:Description about="urn:mozilla:extension:file:tbx.jar">
<package>content/</package>
<skin>skin/</skin>
<locale>en/</locale>
</r:Description>
</file>
</r:Description>
</r:RDF>
The <r:Description> element contains external data:
name of the author, url web site, version...But we should pay attention to
the <id> element that is the data used by the browser to
identify the extension ( <name> is no use for this).
The <targetApplication> element gives characteristics
of the target application. For example {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
is for Firefox. Several target applications are possible (Mozilla,
Camino...). For each target application, min and max compatible versions are
given (see the <minVersion> and
<maxVersion> elements).
The <file> element contains information useful for
extension installation.
Update an extension that can't be activate for versions compatibility reason
Every time Firefox (or other target application) has to update itself or
install an extension, it compares its version with min an max versions
mentioned in install.rdf file. If the conditions are true, every
thing works well. On the contrary, the extension is not installed, or is
deactivated.
This principle seems good in theory but depend heavily with the programmer policy in real world:
- if the author of the extension specify a wide range of target application versions, the extension keep a longer compatibility on the meta data point of view, but there is a risk of bug because of code incompatibility,
- on the contrary, if the max version is exactly the one of the browser used to do the last tests for the extension, then the user is waiting the programmer update at each browser update.
The later is more often seen, because it is not very popular for a programmer to provoke the crash of softwares. But very often too, users have to wait long for new versions of the extensions and can't use the tool while waiting.
In such a case, if there is no code incompatibility, modifying the
<maxVersion> of install.rdf file is enough.
In case you have several extensions deactivated after a browser update, we
recommend to treat extensions one by one to be sure to detect the guilty one
in case of code incompatibility. We come back to Toolbar Enhancements
extension, and would like to make it compatible with Firefox 1.5.0.1 (last
version on 9th of February 2006) with a new install.rdf:
<?xml version="1.0"?>
<r:RDF xmlns:r="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.mozilla.org/2004/em-rdf#">
<r:Description about="urn:mozilla:install-manifest">
<id>tbx@clav.mozdev.org</id>
<name>Toolbar Enhancements</name>
<version>0.16.2</version>
<description>Adds various toolbar buttons and increases toolbar
configurability</description>
<creator>Stephen Clavering</creator>
<homepageURL>http://clav.mozdev.org/</homepageURL>
<updateURL>http://clav.mozdev.org/updates.rdf</updateURL>
<targetApplication>
<r:Description>
<id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</id>
<minVersion>1.0</minVersion>
<maxVersion>1.5.0.*</maxVersion>
</r:Description>
</targetApplication>
<file>
<r:Description about="urn:mozilla:extension:file:tbx.jar">
<package>content/</package>
<skin>skin/</skin>
<locale>en/</locale>
</r:Description>
</file>
</r:Description>
</r:RDF>
We use the wildcards (*). Then the extension becomes compatible this all
minor versions of Firefox 1.5.0. We also did modify <id>
of the extension as its syntax was not compatible with 1.5 version of
Firefox. Then it is enough to put back this install.rdf in the tbx.xpi file
and get a perfect compatible extension with Firefox 1.5.0.1.
These are the corresponding downloads for the 3 extensions that we had to modify (updated for Firefox 2.0 except Tab X):
- Tab X: tab_x-0.9.2-fx.xpi (for Firefox 1.5 only, outdated with Firefox 2.0)
- Toolbar Enhancements: tbx.xpi
- ResizeSearchBox: resizesearchbox.xpi

