Modules

Test des fonctionnalités persistantes et de redémarrage

Lors du test de votre extension, vous pouvez remarquer que certaines fonctionnalités se réinitialisent ou cessent de fonctionner lorsque vous chargez une version mise à jour ou après le redémarrage de Firefox. Par exemple, vous pouvez utiliser le stockage local et remarquer que les données précédemment sauvegardées disparaissent lorsque vous rechargez votre extension. Alternativement, vous pouvez tester votre extension à travers un redémarrage de Firefox, mais notez que votre extension ne reste pas chargée.

Cet article explique pourquoi vous voyez ces comportements. Il vous montre ensuite ce qu'il faut faire pour vous assurer que les fonctions persistent lorsque vous rechargez votre extension et comment configurer pour tester le comportement de redémarrage.

Avant de regarder comment Firefox traite l'extension que vous testez; Il y a quelques fonctionnalités de Firefox et des extensions dont vous devez être conscient : l'ID du module complémentaire et les profils Firefox.

Qu'est-ce qu'un ID complémentaire ?

L'ID de module complémentaire est utilisé pour identifier de manière unique chaque extension et à son tour, cet ID est utilisé pour lier une extension à certaines fonctionnalités des API WebExtension. Ces fonctionnalités sont:

  • storage.managed — identifie les données comme appartenant à l'extension par son ID add-on.
  • storage.sync — identifie les données comme appartenant à l'extension par son ID complémentaire.
  • identity.getRedirectURL — l'URL de redirection inclut l'ID complémentaire de l'extension.
  • Native messaging — l'application native identifie les extensions qui peuvent communiquer avec elles par leur ID complémentaire.
  • pkcs11 — le module PKCS #11 identifie les extensions qui peuvent communiquer avec lui par leur ID complémentaire.
  • runtime.onMessageExternal — une extension envoie des messages à un autre poste en utilisant son ID complémentaire comme adresse.
  • runtime.onConnectExternal — une extension demande une connexion avec une extension par l'ID d'extension de l'autre extension.
  • browserAction — la position sauvegardée du bouton est identifiée comme appartenant à l'extension en fonction de son ID add-on.

Une extension peut se voir attribuer un ID complémentaire en utilisant la clé  "applications" du fichier manifest.json.

"applications": {
  "gecko": {
    "id": "addon@example.com",
    }
  }

Si l'extension n'a pas d'ID de module défini avec la clé "applications" , il reçoit un ID de module complémentaire via l'un des éléments suivants:

  • Si l'extension est soumise à l'AMO et signée, elle reçoit un identifiant lorsqu'elle est signée.
  • Si l'extension est chargée à l'aide de Load Temporary Add-on dans  about:debugging un ID complémentaire temporaire lui est affecté.
    Example of a temporarily loaded extension showing its various IDs

Vous remarquerez un ID supplémentaire dans l'image ci-dessus, l'UUID interne. C'est un identifiant unique donné à l'extension lors de l'installation. Il est utilisé pour définir l'emplacement de stockage des ressources incluses dans l'extension et identifier les données d'un poste dans window.localStorage ou indexedDB. Cependant, vous n'avez pas besoin de connaître sa valeur. Son utilisation dans window.localStorage ou indexedDB est transparente et pour accéder aux ressources incluses dans l'extension, vous utilisez runtime.getURL, qui renvoie le chemin d'accès aux ressources. De plus, étant donné qu'il est unique à chaque installation, il ne fournit pas d'ID pouvant être utilisé à d'autres fins.

Qu'est-ce qu'un profil Firefox?

Les données qui définissent la manière dont l'utilisateur a configuré Firefox, ainsi que les informations générées lors de la navigation sur le Web, telles que l'historique et les cookies, sont stockées dans un dossier spécial, appelé profile. En plus des cookies, le profil contient du stockage local et d'autres contenus liés au profil.

Comportement d'extension dans Firefox

Lorsque vous développez une extension, en supposant que vous n'avez pas défini d'ID complémentaire à l'aide de la clé "applications", le comportement par défaut dans Firefox est le suivant :

  • lorsque vous utilisez la fonction Load Temporary Add-on dans environ: le débogage de votre extension se voit attribuer un nouvel ID de module complémentaire chaque fois que vous le chargez.
  • Lorsque vous utilisez Web-ext, en plus d'obtenir un nouvel ID complémentaire chaque fois que vous lancez une extension, il est également lancé dans un nouveau profil.
  • lorsqu'une extension temporairement chargée est déchargée, le stockage local, tel que celui utilisé par storage.local, window.localStorage, et indexedDB, est supprimé.
  • Lorsque vous arrêtez Firefox, les extensions temporairement chargées sont déchargées et ne sont donc pas disponibles lorsque Firefox redémarre. Cela inclut les extensions chargées avec Load Temporary Add-on dans about:debugging et web-ext.

Les conséquences de ce comportement, lors du rechargement d'une extension, sont les suivantes :

  • toutes les données dans le stockage local ou de synchronisation sont perdues.
  • toute URL de redirection devient invalide.
  • l'extension ne pourra plus communiquer avec des applications natives ou un module PKCS #11.
  • il ne sera plus possible d'envoyer des messages ou de créer des connexions entre les extensions.
  • vous ne pouvez pas tester le comportement de l'extension si Firefox est arrêté et redémarré.
  • Les positions de browserAction ne sont pas reportées

Que dois-je faire pour m'assurer de pouvoir tester mon extension ?

Pour que votre extension se comporte comme une extension signée pendant les tests de développement, utilisez les techniques suivantes :

  • pour vous assurer qu'une extension peut utiliser des fonctionnalités dépendantes de l'ID complémentaire entre les rechargements, telles que le stockage local ou la communication d'application native :
    • définir un ID de module complémentaire à l'aide de la clé "applications" dans le fichier manifest.json de l'extension.
    • lorsque vous utilisez web-ext, assurez-vous d'utiliser le même profil.
  • pour vous assurer d'utiliser le même profil pour plusieurs tests d'une extension lors de l'utilisation de web-ext :
    • en option, utilisez Profile Manager pour créer un nouveau profil Firefox.
    • rouvez le chemin vers votre nouveau profil ou le profil Firefox par défaut en suivant les instructions dans Comment trouver mon profil ?
    • ajoutez le chemin du profil Firefox à la commande web-ext run comme ceci :
      web-ext run --firefox-profile [A PATH TO A FIREFOX PROFILE] --keep-profile-changes
  • tpour préserver le stockage local lors de la suppression d'un module complémentaire temporaire (par exemple, entre les redémarrages du navigateur) :
    • allez à about:config et réglez  extensions.webextensions.keepStorageOnUninstall à true.
  • pour préserver l'accès aux données window.localStorage ou indexedDB lors de la suppression d'un module complémentaire temporaire (par exemple, entre les redémarrages du navigateur) :
    • allez à about:config et réglez extensions.webextensions.keepStorageOnUninstall et extensions.webextensions.keepUuidOnUninstall à true.
  • pour tester le comportement de redémarrage :
    • définir un ID de module complémentaire à l'aide de la clé "applications" dans le fichier manifest.json de l'extension.
    • installez les éditions Nightly ou Developer de Firefox. Remarque :  Vous pouvez également utiliser les versions unbranded Beta et Release builds.
    • allez à about:config et définissez xpinstall.signatures.required à false.
    • Compressez votre extension dans un fichier ZIP using web-ext ou en compressant manuellement.
    • installez votre extension en utilisant Install Add-on From File dans le gestionnaire de modules complémentaires (about:addons).
      Remarque: N'oubliez pas que vous devrez recharger votre extension chaque fois que vous la modifiez.
      Remarque: Si vous ne définissez pas l'ID du module complémentaire, lorsque vous chargez l'extension, vous obtenez une erreur comme celle-ci :

      Example of the message displayed when an add-on ID cannot be found for an extension

      avec une erreur correspondante dans la console du navigateur .

      Example of the message displayed in the browser console when an add-on ID cannot be found for an extension

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : hellosct1
 Dernière mise à jour par : hellosct1,