Auto-hébergement pour Linux

Linux est la seule plate-forme sur laquelle les utilisateurs de Chrome peuvent installer des extensions hébergées en dehors du Chrome Web Store. Cet article explique comment empaqueter, héberger et mettre à jour des fichiers crx à partir d'un serveur Web à usage général. Si vous distribuez une extension ou un thème uniquement via le Chrome Web Store, consultez Hébergement et mise à jour du Web Store.

Package

Les extensions et les thèmes sont diffusés sous forme de fichiers .crx. Lors de l'importation via le tableau de bord du développeur Chrome, le tableau de bord crée automatiquement le fichier crx. S'il est publié sur un serveur personnel, le fichier crx doit être créé localement ou téléchargé à partir du Chrome Web Store.

Télécharger le 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.

Télécharger un fichier .crx depuis le tableau de bord du développeur

Le fichier téléchargé peut être hébergé sur un serveur personnel. Il s'agit de la méthode la plus sécurisée pour 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'extension 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, maintenez le pointeur 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 bascule situé à côté de Mode développeur. Sélectionnez ensuite le bouton PACKER L'EXTENSION.

Le mode développeur est activé, puis cliquez sur "Empaqueter l'extension".

Indiquez le chemin d'accès au dossier de l'extension dans le champ "Répertoire racine de l'extension", puis cliquez sur le bouton PACK EXTENSION. Ignorez le champ Clé privée pour un package de première utilisation.

Spécifiez le chemin d'accès de l'extension, puis cliquez sur "Empaqueter l'extension".

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

Fichiers d'extension empaquetés

Ne perdez pas la clé privée. Conservez le fichier .pem dans un emplacement secret et sécurisé. Vous en aurez besoin 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, puis cliquez sur le bouton PACKER L'EXTENSION. Spécifiez le chemin d'accès au répertoire des extensions et l'emplacement de la clé privée.

Mettre à jour les fichiers d'extension

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

Mettre à jour les fichiers d'extension

Packager via la ligne de commande

Emballez les extensions dans la ligne de commande en appelant chrome.exe. Utilisez l'indicateur --pack-extension pour spécifier l'emplacement du dossier de l'extension et l'indicateur --pack-extension-key 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ôte

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 .crx et les deux conditions suivantes sont remplies :
    • Le fichier n'est pas diffusé avec l'en-tête HTTP X-Content-Type-Options: nosniff.
    • Le fichier est diffusé avec l'un des types de contenu suivants:
    • chaîne vide
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

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.

Mettre à jour

Toutes les deux ou trois heures, le navigateur recherche une URL de mise à jour pour les extensions installées. Pour chacune d'elles, il envoie une requête à cette URL afin de rechercher un fichier XML manifeste de mise à jour.

  • Le contenu renvoyé par une vérification des mises à 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.

Remarque:Pour préserver la confidentialité des utilisateurs, Google Chrome n'envoie aucun en-tête de cookie avec les requêtes de fichier manifeste de mise à jour automatique et ignore tous les en-têtes Set-Cookie dans les réponses à ces requêtes.

URL de mise à jour

Les extensions hébergées sur des serveurs en dehors du Chrome Web Store doivent inclure le champ update_url dans leur fichier manifest.json.

{
  "name": "My extension",
  ...
  "update_url": "https://myhost.com/mytestextension/updates.xml",
  ...
}

Mettre à jour le fichier manifeste

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 éléments <app> et <updatecheck> du fichier manifeste de mise à jour:

appid
L'ID d'extension est généré sur la base 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 "version" du fichier manifest.json du fichier .crx.

Le fichier XML du manifeste de mise à jour peut contenir des informations sur plusieurs extensions en incluant plusieurs éléments <app>.

Tests

Par défaut, la fréquence de vérification des mises à jour est de plusieurs heures. Toutefois, vous pouvez forcer une mise à jour à l'aide du bouton Mettre à jour les extensions maintenant sur la page de gestion des extensions.

Mettre à jour les extensions

Toutes les extensions installées seront alors vérifiées.

Utilisation avancée: paramètres de requête

Le mécanisme de mise à jour automatique de base est conçu pour que le travail côté serveur soit aussi simple que de déposer un fichier XML statique sur n'importe quel serveur Web standard, tel qu'Apache, et de mettre à jour ce fichier XML à mesure que de nouvelles versions d'extensions 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 d'être mises à jour à partir de la même URL exécutant un code dynamique côté serveur au lieu d'un fichier XML statique.

Le format des paramètres de requête est le suivant:

?x=EXTENSION_DATA

EXTENSION_DATA est une chaîne au format URL encodée au format suivant:

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 est 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

Vous pouvez lister plusieurs extensions dans une seule requête pour chaque URL de mise à jour unique. Pour l'exemple précédent, 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 important pour qu'une URL de requête GET soit trop longue (environ 2 000 caractères), 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 d'autres API sont ajoutées au système d'extensions, une version mise à jour d'une extension qui ne fonctionne qu'avec les versions les 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é de la base d'utilisateurs ait installé une nouvelle version. Pour vous assurer qu'une mise à jour donnée ne s'appliquera qu'aux versions de Google Chrome supérieures ou égales à une version spécifique, ajoutez l'attribut "prodversionmin" à l'élément <app> dans la réponse de mise à jour.

<?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 à la version 2 que s'ils exécutent Google Chrome 3.0.193.0 ou une version ultérieure.