Les applications XULRunner, les extensions et les thèmes partagent tous une structure de répertoire commune, et dans certains cas le même paquet peut être utilisé comme une application XULRunner indépendante aussi bien que comme une extension installable dans une autre application. La structure de base des paquets (bundles) peut contenir n'importe quels fichiers parmi ceux-ci :
/install.rdf Manifeste d'installation de thème/extension /application.ini Manifeste de lancement de l'application /components/* Fichiers XPT et composants .so/.dll/.js (>=1.7) /defaults/preferences/*.js Préférences par défaut (>=1.7) /plugins/* Plugins NPAPI (>=1.8) /chrome.manifest Manifestes d'enregistrements chrome (>=1.8) /chrome/icons/default/* Icônes de fenêtre (>=1.8)
Bien sûr, une extension n'a pas besoin de (et normalement n'aura pas) tous ces répertoires. Les thèmes sont limités pour des raisons de sécurité et ne peuvent normalement fournir qu'un chrome.manifest enregistrant le thème et un fichier JAR.
Sous-répertoires spécifiques à une plateforme
Dans certains cas, une seule extension ou application peut avoir besoin d'inclure des composants binaires ou plugins pour plusieurs plateformes, ou des auteurs de thème peuvent vouloir inclure plusieurs fichiers JAR spécifiques à une plateforme. Pour faciliter les choses dans le premier cas, le chargeur d'extension/application possède des sous-répertoires spéciaux prévus spécialement pour les fichiers spécifiques à une plateforme (à partir du toolkit/Gecko 1.8, Firefox/Thunderbird 1.5). La chaîne de plateforme est définie au cours du processus de compilation du toolkit à une valeur unique pour la combinaison du système d'exploitation, l'architecture du processeur et le compileur. Le format de la chaîne de plateforme est :
{OS_TARGET}_{TARGET_XPCOM_ABI}
Tous les fichiers qui sont chargés depuis le répertoire principal de l'extension sont chargés depuis le sous-répertoire
/platform/{chaîne de plateforme}
si celui-ci existe. Par exemple, si un vendeur de plugin désire fournir un plugin aux utilisateurs de Linux, Macintosh et Windows, il fournira les fichiers suivants :
/platform/Linux_x86-gcc3/plugins/libMyPlugin.so /platform/WINNT_x86-msvc/plugins/MyPlugin.dll /platform/Darwin_ppc-gcc3/plugins/libMyPlugin.dylib /platform/Linux_x86-gcc3/components/myComponents.so
Étant donné que les fichiers XPT ne dépendent pas de la plateforme, tous les éventuels fichiers XPT associés seront placés dans le répertoire de composants génériques :
/components/MyPlugin.xpt
Si une extension a du code spécifique à une plateforme non binaire (comme du code utilisant la base de registres de Windows depuis un script), elle peut aussi utiliser l'identifiant du système d'exploitation comme sous-répertoire de plateforme :
/platform/WINNT/components/registerDoctype.js
Lorsque des fichiers JAR spécifiques à une plateforme sont utilisés, chaque répertoire de plateforme doit avoir son propre fichier chrome.manifest
:
chrome.manifest chrome/mytheme-base.jar platform/Darwin/chrome.manifest platform/Darwin/chrome/mytheme-mac.jar platform/WINNT/chrome.manifest platform/WINNT/chrome/mytheme-win.jar
Le chargeur d'application/extension analyse d'abord le répertoire de base, puis les répertoires de plateforme applicables (d'abord /{OS_TARGET}/, ensuite /{OS_TARGET}_{TARGET_XPCOM_ABI}/). Lorsque les préférences par défaut sont définies dans plusieurs répertoires, ceux qui sont chargés en dernier ont priorité sur ceux chargés auparavant.
Fichiers d'extension spécifiques à une application
En plus des fichiers d'extension listés plus haut, les applications peuvent lire des fichiers supplémentaires depuis des extensions. Par exemple, Firefox 1.5 et supérieur cherchera les plugins de recherche Sherlock dans
/searchplugins/*.src
Firefox 2 (et supérieurs) recherchera également les plugins MozSearch et OpenSearch dans
/searchplugins/*.xml
ainsi que les dictionnaires Myspell dans
/dictionaries/*.{aff|dic}
Références officielles de l'API du toolkit
- Structure of an Installable Bundle: describes the common structure of installable bundles, including extensions, themes, and XULRunner applications
- Extension Packaging: specific information about how to package extensions
- Theme Packaging: specific information about how to package themes
- Multiple-item Extension Packaging: specific information about multiple-item extension XPIs
- XUL Application Packaging: specific information about how to package XULRunner applications
- Chrome Registration