Ajouter la mise à jour à vos extensions
Lorsqu’on écrit une extension, il est parfois pratique de pouvoir la mettre à jour chez l’utilisateur, notamment en cas de corrections de bugs. Firefox et Thunderbird intègrent en effet un système pratique de mise à jour. Voyons voir ce que vous devez faire pour lui permettre de fonctionner avec les extensions que vous développez (ou traduisez).
Si vous souhaitez savoir comment mettre au point une extension, allez visiter l’article de Alain B, Conversion des extensions vers Firefox 1.0. Il y montre également comment gérer la mise au jour, le présent article précise un peu plus.
Imaginons donc que vous disposez d’une extension toute prête. Vous voulez ajouter la gestion des mises à jour. Pour cela le travail à fournir se divise en deux parties :
- Modifier l’extension pour la rendre compatible
- Mettre sur un serveur le système de mise à jour, un simple fichier (par exemple sur le site qui héberge votre extension)
Modification de l’extension
Pour rendre votre extension compatible, la modification à effectuer est très simple, il vous suffit d’ajouter une ligne au fichier install.rdf qui se trouve à la racine de votre paquetage XPI.
L’instruction em:updateURL va vous permettre d’indiquer à quel endroit le système de mise à jour devra chercher la présence d’une nouvelle version de l’extension. Vous devez donc préciser l’adresse exacte du fichier que je détaillerai en deuxième partie. Voici ce que cela donne :
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<rdf:Description rdf:about="urn:mozilla:install-manifest">
<em:id>{l'identifiant unique (GUID) représentant votre extension}</em:id>
<em:version>0.0.1</em:version>
...
<em:name>Le nom de l'extension</em:name>
<em:description>La description correspondante</em:description>
<em:creator>Votre nom</em:creator>
<em:updateURL>http://serveur/chemin/update.rdf</em:updateURL>
...
</rdf:Description>
</rdf:RDF>
Important : le nom du fichier de mise à jour, ici update.rdf, n’est pas important, il pourrait s’agir de update.xml de truc.toto ou encore maj.php. L’important est que le serveur qui fournit ce fichier l’envoie avec le bon type MIME, à savoir text/rdf ou text/xml (comme expliqué dans l’article Conversion des extensions vers Firefox 1.0, reportez-vous y pour plus de détails).
Gestion des mises à jour
Je vais maintenant m’attarder plus longuement sur ce fameux fichier qui autorise les mises à jour. Il se divise en deux parties principales, une qui liste toutes les mises à jours disponibles pour l’extension, et enfin une suite de descriptions de chacune de ces mises à jour. Voici, brut, à quoi il ressemble :
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<rdf:Description rdf:about="urn:mozilla:extension:{GUID}">
<em:updates><!-- Liste des mises a jour -->
<rdf:Seq>
<rdf:li rdf:resource="urn:mozilla:extension:{GUID}:0.0.2"/>
<rdf:li rdf:resource="urn:mozilla:extension:{GUID}:0.0.3"/>
</rdf:Seq>
</em:updates>
<em:version>0.0.3</em:version>
<em:updateLink>http://serveur/chemin/extension_0.0.3.xpi</em:updateLink>
</rdf:Description>
<!-- Mise a jour 1 -->
<rdf:Description rdf:about="urn:mozilla:extension:{GUID}:0.0.2">
<em:version>0.0.2</em:version>
<em:targetApplication><!-- Application cible : Firefox -->
<rdf:Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>0.6</em:minVersion>
<em:maxVersion>1.0</em:maxVersion>
<em:updateLink>http://serveur/chemin/extension_0.0.2.xpi</em:updateLink>
</rdf:Description>
</em:targetApplication>
</rdf:Description>
<!-- Mise a jour 2 -->
<rdf:Description rdf:about="urn:mozilla:extension:{GUID}:0.0.3">
<em:version>0.0.3</em:version>
<em:targetApplication><!-- Application cible : Firefox -->
<rdf:Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>0.8</em:minVersion>
<em:maxVersion>1.0</em:maxVersion>
<em:updateLink>http://serveur/chemin/extension_0.0.3.xpi</em:updateLink>
</rdf:Description>
</em:targetApplication>
<em:targetApplication><!-- Application cible : Thunderbird -->
<rdf:Description>
<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
<em:minVersion>1.4</em:minVersion>
<em:maxVersion>1.7</em:maxVersion>
<em:updateLink>http://serveur/chemin/extension_0.0.3.xpi</em:updateLink>
</rdf:Description>
</em:targetApplication>
</rdf:Description>
</rdf:RDF>L’identifiant unique (GUID)
Avant de détailler le contenu de ce fichier, il convient de préciser quelques points importants pour ceux qui ne sont pas forcément familiers des rouages d’une extension.
Chaque extension dispose de son propre identifiant, qui doit donc être unique, pour ne pas entrer en collision avec un autre. Cet identifiant, le Global Unique IDentifier, est généré par le développeur de l’extension, et dépend de plusieurs facteurs, notamment de l’heure à laquelle il est généré. Mais inutile de s’étendre là-dessus. Chacune des applications de la Fondation Mozilla dispose également d’un GUID, qui est bien entendu invariable :
- Firefox :
{ec8030f7-c20a-464f-9b0e-13a3a9e97384} - Thunderbird :
{3550f703-e582-4d05-9a08-453d09bdfdc6} - Mozilla :
{86c18b42-e466-45a9-ae7a-9b95ba6f5640}
Ces trois GUID sont importants, ils vont permettre de préciser dans votre fichier pour quelle application il y a une mise à jour (on retrouve d’ailleurs ces mêmes identifiants dans le fichier d’installation install.rdf, étant donné qu’ils indiquent si on peut installer ou non. Reportez-vous de nouveau à l’article Conversion des extensions vers Firefox 1.0).
Détails du fichier de mise à jour
Entrons maintenant dans le vif du sujet.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">Il s’agit du prologue XML qui précise les espaces de noms nécessaires à la mise au point du document. (Note : pensez à fermer la balise racine : </rdf:RDF>)
l’espace de nom xmlns:rdf indique que tous les éléments préfixés par rdf: appartiennent à un document de type RDF
l’espace de nom xmlns:em indique pour sa part que tous les élements préfixés par em: appartiennent au gestionnaire d’extensions (em = extension manager). Cet espace de nom est défini par la Fondation Mozilla.
<rdf:Description rdf:about="urn:mozilla:extension:{GUID}">
<em:updates><!-- Liste des mises a jour -->
<rdf:Seq>
<rdf:li rdf:resource="urn:mozilla:extension:{GUID}:0.0.2"/>
<rdf:li rdf:resource="urn:mozilla:extension:{GUID}:0.0.3"/>
</rdf:Seq>
</em:updates>
<em:version>0.0.3</em:version>
<em:updateLink>http://serveur/chemin/extension_0.0.3.xpi</em:updateLink>
</rdf:Description>
<rdf:Description rdf:about="urn:mozilla:extension:{GUID}"> précise au système de mise à jour qu’il existe des informations pour l’extension possédant le GUID correspondant.
L’élément <em:updates> indique la liste des différentes versions disponibles pour la mise à jour. Vous devez mettre le sous-élément rdf:Seq, il indique qu’il y a une suite d’élements rdf:li, et ce même si un seul est présent. À l’intérieur de cet élément, vous pouvez lister toutes les versions dont vous disposez. GUID est à remplacer par l’identifiant unique de l’extension, et le numéro qui suit (0.0.2 ou 0.0.3) représente le numéro de version de la mise à jour.
<em:version> est présent pour la compatibilité avec Firefox 0.9, qui disposait d’un système de mise à jour, mais pas aussi abouti que celui-ci. Il indique le numéro de version de la mise à jour. Thunderbird pour sa part a directement implémenté le nouveau système. Vous devez indiquer dans cet élément la version la plus récente de l’extension, Firefox 0.9 n’étant pas capable de voir la présence de la liste de mise à jour.
<em:updateLink> est également là pour Firefox 0.9. Indiquez ici le lien pour télécharger directement la dernière version de l’extension.
Comme vous pouvez le voir dans la version complète du fichier de mise à jour, sont ensuite détaillées les différentes mise à jour :
<!-- Mise a jour 1 -->
<rdf:Description rdf:about="urn:mozilla:extension:{GUID}:0.0.2">
<em:version>0.0.2</em:version>
<em:targetApplication><!-- Application cible : Firefox -->
<rdf:Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>0.6</em:minVersion>
<em:maxVersion>1.0</em:maxVersion>
<em:updateLink>http://serveur/chemin/extension_0.0.2.xpi</em:updateLink>
</rdf:Description>
</em:targetApplication>
</rdf:Description>
<!-- Mise a jour 2 -->
<rdf:Description rdf:about="urn:mozilla:extension:{GUID}:0.0.3">
<em:version>0.0.3</em:version>
<em:targetApplication><!-- Application cible : Firefox -->
<rdf:Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>0.8</em:minVersion>
<em:maxVersion>1.0</em:maxVersion>
<em:updateLink>http://serveur/chemin/extension_0.0.3.xpi</em:updateLink>
</rdf:Description>
</em:targetApplication>
<em:targetApplication><!-- Application cible : Thunderbird -->
<rdf:Description>
<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
<em:minVersion>1.4</em:minVersion>
<em:maxVersion>1.7</em:maxVersion>
<em:updateLink>http://serveur/chemin/extension_0.0.3.xpi</em:updateLink>
</rdf:Description>
</em:targetApplication>
</rdf:Description>On reprend donc exactement chaque élément se trouvant dans <rdf:Seq> de <em:updates> et on le détaille.
<rdf:Description rdf:about="urn:mozilla:extension:{GUID}:0.0.2"> précise que l’on détaille la version 0.0.2 de l’extension ayant pour identifiant unique GUID (que vous devez remplacer par celui se trouvant plus haut)
<em:version> indique quel est le numéro de version (oui c’est déjà indiqué dans le point précédent, mais c’est nécessaire
)
On indique maintenant quelle est l’application ciblée par cette version, via <em:targetApplication> :
-
<em:id>précise le GUID de l’application, ici Firefox -
<em:minVersion>précise à partir de quelle version de Firefox on peut mettre cette mise à jour -
<em:maxVersion>précise jusqu’à quelle version de Firefox on peut mettre cette mise à jour
Enfin on donne le lien permettant de récupérer la mise à jour, à l’aide de <em:updateLink>, le système de mise à jour ira donc y télécharger la nouvelle version et pourra l’installer.
Certaines extensions peuvent être installées sur plusieurs logiciels, c’est le cas de la version 0.0.3 de notre extension exemple, qui est compatible à la fois avec Firefox et avec Thunderbird. Il suffit pour le préciser d’ajouter un autre élément <em:targetApplication> dans la partie <rdf:Description rdf:about="urn:mozilla:extension:{GUID}:0.0.3"> et le tour est joué ! Bien sûr vous pouvez indiquer un lien vers un autre fichier dans <em:updateLink>.
Votre fichier peut contenir autant de descriptions d’extension que vous voulez. Vous pouvez ainsi ajouter au sein de l’élément <rdf:RDF> d’autres <rdf:Description rdf:about="urn:mozilla:extension:{GUID_autre}:1.1.0"> (par exemple), à la seule condition que vous repreniez le processus précédent pour détailler la ou les mises à jour.
Lors d’une mise à jour d’extension, il vous suffit, soit de modifier le numéro de version qui apparait dans <rdf:li> et les autres endroits où vous l’avez entré, soit d’ajouter une nouvelle ligne <rdf:li>et d’ajouter dans le fichier l’élément <rdf:Description> correspondant. Cette dernière solution n’est utile que si vous souhaitez proposer deux versions différentes lors de la mise à jour, ou si par exemple la dernière version de votre extension est compatible avec des versions de logiciels différentes.
Pour un exemple complet (et complexe
), vous pouvez regarder le fichier de mise à jour que j’utilise pour mes traductions d’extensions (affichez le code source du fichier pour mieux voir).
Utilisation avancée
Lors de la mise à jour, il est possible de préciser des informations supplémentaires au serveur qui fourni le fichier, permettant de cibler la mise à jour. Si <em:updateLink> contient un des paramètres suivants, l’application le remplacera par la bonne valeur.
| Variable | Description |
|---|---|
| %ITEM_ID% | Le GUID de l’extension dont on recherche une mise à jour |
| %ITEM_VERSION% | La version courante de l’extension dont on recherche une mise à jour |
| %APP_ID% | Le GUID de l’application cible, en cours d’utilisation |
| %APP_VERSION% | La version de l’application cible, en cours d’utilisation |
Si par exemple vous avez dans le fichier install.rdf :
<em:updateLink>http://serveur/chemin/update.php?ext_id=%ITEM_ID%&ext_ver=%ITEM_VERSION%&app_id=%APP_ID%&app_ver=%APP_VERSION%</em:updateLink>
alors Firefox appelera le lien (par exemple) :
http://serveur/chemin/update.php?ext_id={209030f7-af0a-464f-9b0e-13a3a9e95673}&ext_ver=0.0.1&app_id={ec8030f7-c20a-464f-9b0e-13a3a9e97384}&app_ver=1.0
Finalisation
Il ne vous reste plus qu’à mettre le fichier de mise à jour (ou le script) sur votre serveur, à l’endroit indiqué par <em:updateURL> dans le fichier install.rdf de l’extension.
Désormais, lorsque les utilisateurs de l’extension vérifieront la présence de mise à jour, la liste apparaîtra (à condition qu’ils ne possèdent pas déjà la dernière version).
Important : N’oubliez pas de spécifier le bon type MIME, sinon le gestionnaire d’extensions rapportera une erreur lors de la mise à jour.
Articles dans la même rubrique
- Un dictionnaire français intégré par défaut dans Firefox, Thunderbird et Seamonkey (8 février 2008 - 9170 visites - popularité 5%)
- Déplacer un profil Firefox ou Thunderbird (16 juillet 2007 - 28892 visites - popularité 8%)
- Le mode sans échec, ou safe mode, pour Firefox et Thunderbird (13 février 2007 - 29570 visites - popularité 4%)
Commentaires
(Si vous recherchez de l'aide pour l'utilisation d'un produit, veuillez utiliser les forums de Geckozone. Les commentaires concernent uniquement l'article. Merci.)
Ajouter un commentaire

