Les extensions hébergées en dehors du Chrome Web Store ne peuvent être installées que par les utilisateurs de Linux. Cet article explique comment empaqueter, héberger et mettre à jour des fichiers .crx à partir d'un serveur personnel. Si
vous distribuez une extension ou un thème uniquement via le Chrome Web Store, consultez Hébergement et mise à jour sur le Web Store.
Empaquetage
Les extensions et les thèmes sont fournis sous forme de fichiers .crx. Lorsque vous effectuez une importation via le tableau de bord des développeurs Chrome , le fichier .crx est créé automatiquement. S'il est publié sur un serveur personnel, le fichier .crx devra être créé localement ou téléchargé depuis le Chrome Web Store.
Télécharger un fichier .crx depuis le Chrome Web Store
Si une extension est hébergée sur le Chrome Web Store, le fichier .crx peut être téléchargé depuis le tableau de bord du développeur. Recherchez l'extension sous "Vos fiches", puis cliquez sur "Plus d'infos". Dans la fenêtre pop-up, cliquez sur le lien bleu main.crx pour le télécharger.

Le fichier téléchargé peut être hébergé sur un serveur personnel. Il s'agit du moyen le plus sécurisé d'héberger une extension localement, car le contenu de l'extension sera signé par le Chrome Web Store. Cela permet de détecter les attaques et les falsifications potentielles.
Créer un fichier .crx localement
Les répertoires d'extensions sont convertis en fichiers .crx sur la page de gestion des extensions. Accédez à chrome://extensions/ dans la barre d'adresse ou cliquez sur le menu Chrome, pointez sur "Plus d'outils", puis sélectionnez "Extensions".
Sur la page de gestion des extensions, activez le mode développeur en cliquant sur le bouton à côté de Mode développeur. Sélectionnez ensuite le bouton EMPAQUETER L'EXTENSION.

Spécifiez le chemin d'accès au dossier de l'extension dans le champ Répertoire racine de l'extension, puis cliquez sur le bouton EMPAQUETER L'EXTENSION. Ignorez le champ Clé privée pour un premier package.

Chrome crée deux fichiers : un fichier .crx et un fichier .pem, qui contient la clé privée de l'extension.

Ne perdez pas la clé privée ! Conservez le fichier .pem dans un endroit secret et sécurisé. Il sera
nécessaire pour mettre à jour l'extension.
Mettre à jour un package .crx
Mettez à jour le fichier .crx d'une extension en augmentant le numéro de version dans manifest.json.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Revenez à la page de gestion des extensions et cliquez sur le bouton EMPAQUETER L'EXTENSION. Spécifiez le chemin d'accès au répertoire des extensions et l'emplacement de la clé privée.

La page fournit le chemin d'accès à l'extension empaquetée mise à jour.

Empaqueter via la ligne de commande
Empaquetez les extensions dans la ligne de commande en appelant chrome.exe. Utilisez l'--pack-extension
option pour spécifier l'emplacement du dossier de l'extension et l'--pack-extension-key option pour
spécifier l'emplacement du fichier de clé privée de l'extension.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Hébergement
Un serveur qui héberge des fichiers .crx doit utiliser des en-têtes HTTP appropriés pour permettre aux utilisateurs d'installer l'extension en cliquant sur un lien.
Google Chrome considère qu'un fichier peut être installé si l'une des conditions suivantes est remplie :
- Le fichier dispose du type de contenu
application/x-chrome-extension. - Le suffixe du fichier est
.crxet les deux conditions suivantes sont remplies :- Le fichier ne dispose pas de l'en-tête HTTP
X-Content-Type-Options: nosniff. - Le fichier dispose de l'un des types de contenu suivants :
- chaîne vide
- "text/plain"
- "application/octet-stream"
- "unknown/unknown"
- "application/unknown"
- "*/*"
- Le fichier ne dispose pas de l'en-tête HTTP
Lorsqu'un fichier pouvant être installé n'est pas reconnu, c'est généralement parce que le serveur envoie l'en-tête X-Content-Type-Options: nosniff. Cela peut aussi être dû au fait que le serveur envoie un type de contenu inconnu, qui ne figure pas dans la liste ci-dessus. Pour résoudre un problème d'en-tête HTTP, modifiez la configuration du serveur ou essayez d'héberger le fichier .crx sur un autre serveur.
Mise à jour
Toutes les quelques heures, le navigateur vérifie si les extensions installées disposent d'une URL de mise à jour. Pour chacune d'elles, il envoie une requête à cette URL pour rechercher un fichier XML de fichier manifeste de mise à jour.
- Le contenu renvoyé par une vérification de mise à jour est un document XML de fichier manifeste de mise à jour qui répertorie la dernière version d'une extension.
Si le fichier manifeste de mise à jour mentionne une version plus récente que celle installée, le navigateur télécharge et installe la nouvelle version. Comme pour les mises à jour manuelles, le nouveau fichier .crx doit être signé avec la même clé privée que la version actuellement installée.
URL de mise à jour
Les extensions hébergées sur des serveurs en dehors du Chrome Web Store doivent inclure le update_url champ dans
leur manifest.json fichier.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Fichier manifeste de mise à jour
Le fichier manifeste de mise à jour renvoyé par le serveur doit être un document XML.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
</app>
</gupdate>
Ce format XML est emprunté à celui utilisé par Omaha, l'infrastructure de mise à jour de Google. Le
système d'extensions utilise les attributs suivants pour les <app> et <updatecheck> éléments du
fichier manifeste de mise à jour :
| appid | L'ID de l'extension est généré en fonction d'un hachage de la clé publique, comme décrit dans la section Empaquetage. L'ID d'une extension s'affiche sur la page de gestion des extensions. |
| codebase | URL HTTPS du fichier .crx. |
| version | Utilisé par le client pour déterminer s'il doit télécharger le fichier .crx spécifié par codebase. Il doit correspondre à la valeur de "version" dans le fichier manifest.json du fichier .crx. |
Le fichier XML du fichier manifeste de mise à jour peut contenir des informations sur plusieurs extensions en incluant plusieurs éléments <app>.
Tests
La fréquence de vérification des mises à jour par défaut est de plusieurs heures, mais une mise à jour peut être forcée à l'aide du bouton Mettre à jour les extensions maintenant sur la page de gestion des extensions.

Cela lancera des vérifications pour toutes les extensions installées.
Utilisation avancée : paramètres de requête
Le mécanisme de mise à jour automatique de base est conçu pour simplifier le travail côté serveur en déposant simplement un fichier XML statique sur n'importe quel serveur Web simple, tel qu'Apache, et en mettant à jour ce fichier XML lorsque de nouvelles versions d'extension sont publiées.
Les développeurs qui hébergent plusieurs extensions peuvent vérifier les paramètres de requête, qui indiquent l'ID et la version de l'extension dans la requête de mise à jour. L'inclusion de ces paramètres permet aux extensions de se mettre à jour à partir de la même URL exécutant du code côté serveur dynamique au lieu d'un fichier XML statique.
Le format des paramètres de requête est le suivant :
?x=EXTENSION_DATA
Où EXTENSION_DATA est une chaîne encodée au format URL :
id=EXTENSION\_ID&v=EXTENSION\_VERSION
Par exemple, deux extensions pointent vers la même URL de mise à jour (https://test.com/extension_updates.php) :
- Extension 1
- ID : "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Version : "1.1"
- Extension 2
- ID : "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Version : "0.4"
La requête de mise à jour de chaque extension individuelle serait la suivante :
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
et
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Plusieurs extensions peuvent être listées dans une seule requête pour chaque URL de mise à jour unique. Dans l'exemple ci-dessus, si un utilisateur a installé les deux extensions, les deux requêtes sont fusionnées en une seule :
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Si le nombre d'extensions installées utilisant la même URL de mise à jour est suffisamment élevé pour qu'une URL de requête GET soit trop longue (plus de 2 000 caractères environ), la vérification de la mise à jour émet des requêtes GET supplémentaires si nécessaire.
Utilisation avancée : version minimale du navigateur
À mesure que des API sont ajoutées au système d'extensions, une version mise à jour d'une extension qui ne fonctionnera qu'avec les versions plus récentes du navigateur peut être publiée. Bien que Google Chrome lui-même soit mis à jour automatiquement, il peut s'écouler quelques jours avant que la majorité des utilisateurs ne soient passés à une nouvelle version donnée. Pour vous
assurer qu'une mise à jour donnée ne s'applique qu'aux versions de Google Chrome égales ou supérieures à une version
spécifique, ajoutez l'attribut "prodversionmin" à l'élément
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
</app>
</gupdate>
Cela garantit que les utilisateurs ne passeront automatiquement à la version 2 que s'ils exécutent Google Chrome 3.0.193.0 ou une version ultérieure.