Pendant l’exécution, Firefox utilise un répertoire pour les réglages, ou profil, afin de conserver tous les paramétrages propres à l’utilisateur ou l’utilisatrice tels que les marque-pages, l’historique et les extensions. Pendant le lancement, Firefox choisit d’utiliser ce répertoire en se fondant sur quelques critères comprenant les arguments de la ligne de commande, les variables d’environnement et un fichier qui énumère les profils, ceux par défaut et tous ceux connus.
Firefox 67 avait pour but de permettre aux utilisateurs et utilisatrices d’utiliser différentes installations de Firefox simultanément, sans avoir besoin de configurer des arguments de la ligne de commande, et d’arrêter le comportement consistant à partager des profils avec des versions de Firefox plus anciennes, comme ce comportement n’est pas pris en charge et est connu pour causer des problèmes difficiles à diagnostiquer et corriger, et même, dans certains cas assez graves, pour rendre Firefox complètement inutilisable. À cette fin, des modifications ont été apportées à la sélection des profils.
Cet article décrit en détail comment la sélection de profil fonctionnait auparavant, comment elle fonctionne maintenant dans Firefox 67 et comment on migre les usagers des versions antérieures.
Table des matières
Comportement précédent
Au démarrage, Firefox va charger une liste de profils connus à partir d’un fichier, profiles.ini, situé à un endroit précis dans le répertoire personnel de l’utilisateur ou l’utilisatrice. Il contient quelques paramètres et une liste des profils connus avec leur emplacement sur le disque. L’un d’entre eux est marqué comme le profil par défaut. Cette valeur par défaut s’applique à toute version ou installation de Firefox exécutée par l’utilisateur ou l’utilisatrice.
Firefox vérifie alors un certain nombre de variables d’environnement et les arguments de la ligne de commande qui peuvent prendre le pas sur le profil par défaut. Cela n’est pas détaillé ici comme ce comportement n’a pas été modifié. Il est suffisant de dire qu’une fois ces vérifications effectuées, Firefox a soit choisi un profil à utiliser, soit n’en a pas trouvé du tout.
Si aucun profil n’a été trouvé et qu’existent des profils énumérés dans profiles.ini (ce qui serait signe soit d’un mauvais argument de la ligne de commande, soit de l’absence d’un profil marqué comme profil par défaut), alors un gestionnaire de profils est affiché pour permettre à l’utilisateur ou l’utilisatrice de sélectionner ou créer un nouveau profil à utiliser par défaut.
Si aucun profil n’a été trouvé et que profiles.ini est vide, alors ce lancement de Firefox est considéré comme le premier et un nouveau profil par défaut, vide, est créé et utilisé sans intervention de l’utilisateur ou l’utilisatrice.
Il est possible de changer le profil par défaut à tout moment grâce au gestionnaire de profils, ce qui le change pour toutes les installations et versions de Firefox.
Firefox Developer Edition
Une complication réside en ce que Firefox Developer Edition utilise normalement un profil par défaut différent des autres versions de Firefox. Cela se fait en ignorant le marqueur du profil par défaut normal dans profiles.ini et en utilisant à la place, par défaut, un profil nommé « dev-edition-default ». Cette différence a provoqué de nombreux bogues et, en conséquence, un désir de rendre le comportement de Developer Edition identique à celui des autres versions.
Instances multiples
Un détail supplémentaire consiste en ce qui se produit quand une instance de Firefox s’exécute déjà. Avant que ne démarre la sélection du profil, Firefox essaie de trouver une instance active de Firefox dans le système. S’il en existe une, alors, au lieu de démarrer, tous les arguments de la ligne de commande sont adressés à l’instance existante et exécutés par elle.
Sous Windows une seule instance de Firefox peut s’exécuter à la fois sauf si l’option -no-remote est utilisée dans la ligne de commande pour des instances supplémentaires. Celles-ci démarrent, qu’une autre instance soit lancée ou non, mais tout démarrage ultérieur de Firefox ne peut détecter ces instances et lance donc une nouvelle instance normale si cette dernière n’est pas trouvée. Quand de multiples instances sont exécutées, chacune doit utiliser un profil distinct. Des verrous de profil sont utilisés pour forcer cela.
Sous Linux le comportement est semblable, mais avec quelques complexités. Si un argument de la ligne de commande spécifiant un profil est passé, alors Firefox essaie seulement de trouver une instance utilisant ce profil et de lui transférer la commande. S’il n’en trouve pas, le démarrage continue. L’option -new-instance peut également être passée provoquant le démarrage de Firefox sans souci des instances existantes.
Nouveau comportement
À partir de la version 67 de Firefox, plutôt que d’avoir un seul profil par défaut utilisé par toutes les installations, chaque installation de Firefox (en se fondant sur l’emplacement physique sur le disque après avoir suivi tous les liens symboliques) a son propre profil par défaut.
Dans cette partie, « ancien profil » renvoie au profil qui aurait été utilisé par défaut dans les versions de Firefox antérieures à la 67, « profil dédié » au profil déterminé comme celui par défaut pour une installation de Firefox.
Au lancement, Firefox charge toujours profiles.ini qui contient les mêmes informations qu’auparavant. Un des profils connus peut être signalé comme l’ancien profil par défaut. De plus, profiles.ini répertorie désormais les installations connues de Firefox. Chaque nouvelle section a son nom déduit par hachage du répertoire d’installation de Firefox. Chaque section d’installation contient l’emplacement sur le disque du profil dédié propre à cette installation ainsi qu’un marqueur indiquant si ce profil est « verrouillé » pour cette installation.
Comme auparavant, Firefox examine toujours les arguments et options de la ligne de commande ainsi que les variables d’environnement qui pourraient affecter le choix du profil par défaut. Après cette vérification, s’il existe déjà un profil dédié pour cette installation il sera utilisé comme profil par défaut et le démarrage se poursuit.
Là où les comportements diffèrent, c’est lorsqu’il n’y a pas de profil par défaut dédié à cette installation (ce qui est notamment le cas quand Firefox se lance comme résultat d’un redémarrage et que le lancement précédent utilisait l’ancien profil par défaut, ce qui se produit généralement lors d’un redémarrage automatique pour installer une mise à jour vers une version 67 ou ultérieure).
Si la section correspondant à cette installation existe dans profiles.ini, mais ne correspond à aucun profil existant (il a été depuis supprimé), alors un nouveau profil dédié est créé et utilisé.
Si aucune section correspondant à cette installation n’existe dans profiles.ini, alors ce lancement est considéré être le premier où cette installation est en lancée en version 67 ou ultérieure. Dans ce cas une approche heuristique est utilisée pour décider s’il faut créer un nouveau profil dédié par défaut ou marquer l’ancien profil par défaut comme défaut pour cette installation également :
- L’ancien profil par défaut contient-il un fichier compatibility.ini qui peut être analysé. Si ce n’est pas le cas, on crée un nouveau profil dédié et on continue le lancement (seules quelques très, très anciennes versions de Firefox ne crée pas ce fichier, son absence signifie donc que le profil est, soit entièrement vide, soit tellement ancien qu’il est très probablement inutilisable avec les versions modernes de Firefox).
- Le fichier compatibility.ini contient des informations sur la dernière installation de Firefox qui utilisait l’ancien profil par défaut. Si ce dernier était utilisé par une installation différente de Firefox, on crée alors un nouveau profil dédié et on continue le lancement.
- On vérifie qu’aucune autre installation connue de Firefox a l’ancien profil par défaut repéré comme son profil dédié par défaut et marqué comme « verrouillé » pour l’installation. Si c’est le cas, on crée alors un nouveau profil dédié et on continue le lancement.
- On marque l’ancien profil par défaut comme le profil dédié par défaut pour cette installation, on l’enlève comme profil dédié par défaut pour d’autres installations de Firefox (ce qui est fait de façon qu’à leur prochain lancement, elles créeront simplement un nouveau profil plutôt qu’essayer d’utiliser l’ancien profil par défaut). On continue le lancement. Le profil est toujours marqué comme ancien profil par défaut à ce moment de sorte que les versions plus anciennes de Firefox continuent de l’utiliser comme défaut jusqu’à une mise à jour.
- Plus tard au cours du lancement (cela ne peut être fait avant pour diverses raisons), on vérifie si cette installation de Firefox est marquée navigateur par défaut du système. Si c’est le cas, on marque le profil dédié comme « verrouillé » pour cette installation.
L’utilisateur ou l’utilisatrice est toujours en capacité de changer le profil dédié par défaut de cette installation de Firefox en utilisant le gestionnaire de profils, la modification ne s’applique alors qu’à cette installation. Choisir ainsi le profil le marque comme « verrouillé » pour cette installation.
Firefox Developer Edition
Avec Firefox Developer Edition 67, la sélection du profil par défaut a été modifiée pour être plus standard. La version Developer Edition utilise le même système pour le choix du profil dédié que les autres versions de Firefox 67 et ne dépend plus d’un nommage particulier du profil. La seule différence avec la description ci-dessus consiste en ce qu’« ancien profil » désigne le profil nommé « dev-edition-default » plutôt que celui désigné comme profil par défaut dans profiles.ini.
Instances multiples
L’exécution de plusieurs instances de Firefox a aussi été modifiée avec la version 67. Désormais Windows et Linux se comportent de façon identique :
Pendant le démarrage, Firefox exécute complètement la sélection de profils pour choisir celui qui est voulu en se basant sur les options de la ligne de commande, les variables d’environnement et les informations sur le profil par défaut. Firefox recherche alors une instance en cours de Firefox qui utilise le profil désiré, si elle existe alors, au lieu de démarrer, tous les arguments de la ligne de commande sont passés à l’instance trouvée.
Le bénéfice de cette méthode consiste en ce qu’il est possible d’exécuter simultanément des installations différentes de Firefox sans arguments ou options supplémentaires dans la ligne de commande. Chacune d’elles utilise son propre profil par défaut, le lancement d’une installation utilise son profil par défaut, le lancement d’une autre utilise un autre profil par défaut. Si Firefox bêta est en cours d’exécution et que le système d’exploitation utilise la version standard de Firefox comme navigateur par défaut, la demande d’ouverture d’un lien dans une autre application l’ouvre dans la version standard de Firefox là où, auparavant, ce lien aurait été ouvert dans n’importe quelle installation de Firefox en cours d’exécution.
Avec cette fonctionnalité, les options -no-remote et -new-instance ne sont plus nécessaires pour lancer des instances différentes de Firefox simultanément, mais leur utilisation ne provoque aucune erreur.
Blocage des retours vers une version antérieure
Une autre modification introduite dans Firefox 67 est la détection du retour vers une version antérieure du profil. Au lancement, Firefox examine le profil pour voir s’il a dernièrement été utilisé par une version plus récente de Firefox que celle que l’utilisateur ou l’utilisatrice essaie de démarrer. Cela est connu pour provoquer de nombreux problèmes, parfois bénins, mais d’autres fois beaucoup moins. Firefox empêche désormais l’utilisateur ou l’utilisatrice de procéder ainsi, leur proposant de créer plutôt un nouveau profil.
Désactivation des modifications
Il est possible de revenir sur les modifications de la sélection des profils en positionnant la variable d’environnement MOZ_LEGACY_PROFILES. Cela n’affecte cependant pas les modifications portant sur les instances multiples. Le blocage du retour en arrière peut être contourné par le positionnement de la variable d’environnement MOZ_ALLOW_DOWNGRADE ou en ajoutant l’option --allow-downgrade à la ligne de commande du lancement de Firefox.