Un bug d’infobulle de Firefox corrigé après 22 ans
(bugzilla.mozilla.org)- Le bug
tooltip-ghost, qui faisait que les infobulles restaient au premier plan même quand Firefox était en arrière-plan, a été suivi pendant longtemps dans Bugzilla et est passé à l’étatVERIFIED FIXEDdans la branche Firefox 119 - La première reproduction consistait à survoler un lien ou une icône de la barre d’outils pour faire apparaître une infobulle, puis à basculer vers une autre application avec Command-Tab ou Alt-Tab, l’infobulle ne disparaissant alors pas
- Des cas similaires ont ensuite été signalés non seulement sur Mac OS X, Windows et Linux, mais aussi dans Thunderbird, Sunbird et Lightning ; dans Firefox 5.0.1, le simple passage de la souris au-dessus d’une fenêtre en arrière-plan pouvait déclencher une infobulle et un état de survol
- Le correctif final,
only show tooltip when document has focus, modifie le comportement pour n’afficher les infobulles que lorsque le document a le focus ; il a été intégré àmozilla-centralavec la révision8ae372dc88d1 - La QA a reproduit le problème avec Firefox 106.0.1 et Ubuntu 22.04 en suivant la procédure d’origine, puis a confirmé qu’il ne persistait plus dans une build Nightly 120.0a1 ; certains bugs de régression liés ont ensuite été rattachés séparément
Infobulles restant au-dessus de Firefox en arrière-plan
- Le bug 148624 concerne le problème des infobulles qui restent au premier plan même lorsque Firefox est en arrière-plan
- Son titre d’origine est
Tooltips persist in foreground when Firefox is in background, et son alias esttooltip-ghost - Son état est
VERIFIED FIXED, avec pour jalon cible la branche 119 - Sa classification est
Core :: XUL, son typedefect, et sa sévéritéS3
Procédure de reproduction initiale et comportement attendu
- L’environnement du premier signalement était
Mozilla/5.0 ... Mac OS X ... Gecko/20020602 BuildID: 2002060203 - La procédure de reproduction était simple
- Survoler une icône ou un lien de la barre d’outils
- Attendre que l’infobulle apparaisse
- Envoyer Mozilla en arrière-plan avec Command-Tab
- En pratique, une petite boîte d’infobulle jaune restait au premier plan
- Le comportement attendu était que l’infobulle disparaisse lorsque Mozilla passait en arrière-plan
- L’auteur du signalement initial indiquait que l’infobulle ne disparaissait qu’après avoir remis Firefox au premier plan et déplacé la souris hors de la barre d’outils
Reproductions sur plusieurs plateformes
- Après les premières confirmations, le périmètre de plateforme est passé de Mac OS X à All, et le même problème a aussi été reproduit sous Windows XP et Windows 98
- Des cas ont également continué à apparaître avec Linux GTK2, Firefox 0.8, Firefox 2.0.0.14, Firefox 4 nightly, Firefox 5.0.1, Firefox 36.0, Firefox 49.0.2, Firefox 106.0.1, Firefox 113.0.2, Firefox 115.0.2 et Firefox 117.0, entre autres
- Des phénomènes similaires sont aussi apparus dans les environnements Thunderbird, Sunbird et Lightning
- Dans Thunderbird 2.0.0.17 et Lightning 0.9, un cas où l’infobulle de la fenêtre des tâches restait au-dessus d’une fenêtre de notification a été joint
- La combinaison Thunderbird 102.4.1 et Firefox 106.0.1 a également permis de reproduire le problème sous GNU/Linux
- Des étapes de reproduction ont aussi été soumises avec Firefox 117.0 et Thunderbird 115.2.0, dans des environnements
xfceetxfwm
- Un utilisateur indiquait que le problème continuait à se produire avec Firefox 115.0.2 et GNOME 44, et utilisait comme contournement le paramètre
browser.chrome.toolbar_tipspour désactiver complètement les infobulles
Effets au-delà des infobulles persistantes
- En plus des infobulles déjà affichées qui restaient visibles, il a aussi été confirmé que de nouvelles infobulles apparaissaient lorsque la souris passait au-dessus de la zone correspondante d’une fenêtre Firefox alors que Firefox était en arrière-plan
- Dans Firefox 5.0.1, un cas joint montrait que lorsque Transmission était au premier plan et Firefox en arrière-plan, le déplacement de la souris au-dessus de la fenêtre Inspector de Transmission déclenchait des infobulles de Firefox
- Il y a aussi eu un cas où la grande infobulle du bouton de barre d’outils d’Adblock Plus apparaissait au-dessus de Transmission
- Un cas conservé montre l’infobulle
Optionsde Transmission et l’infobulle du champ de recherche Google de Firefox affichées simultanément et se chevauchant - Sur les éléments de la barre de favoris, non seulement l’infobulle, mais aussi l’état de survol étaient déclenchés
- L’état du bouton de favori changeait d’abord, puis l’infobulle de l’URL apparaissait peu après
- Le bouton
+deOpen a New Taba aussi été enregistré comme exception déclenchant un état de survol et une infobulle en arrière-plan
Orientation du correctif et patch intégré
- Dans les discussions du début des années 2010, une approche a été proposée : ne pas afficher l’infobulle si la fenêtre n’a pas le focus au moment où le minuteur d’infobulle s’exécute
- Safari et Google Chrome ont servi de points de comparaison sur Mac, car ils n’affichent pas d’infobulles lorsqu’ils ne sont pas l’application au premier plan
- La description finale du patch était
only show tooltip when document has focus - Le patch a été envoyé en pièce jointe sur Phabricator, puis intégré à
autolandet àmozilla-central - L’état est passé de
ASSIGNEDàRESOLVED, avec une résolution FIXED
Validation QA et régressions ultérieures
- La QA a confirmé le problème avec Firefox 106.0.1 et Ubuntu 22.04 en suivant la procédure de reproduction d’origine
- Dans la même configuration, le problème ne persistait plus avec la dernière Nightly 120.0a1, ce qui a fait passer l’état à VERIFIED
- L’état
firefox119est passé defixedàverified - Un utilisateur a indiqué que le problème n’apparaissait que lorsque
MOZ_ENV_XINPUT2=1, et disparaissait avecMOZ_ENV_XINPUT2=0; ce point a été relié àbug 1809029 - Les bugs suivants ont ensuite été liés comme régressions associées
1857513: l’infobulle de la barre latérale des favoris n’apparaît pas au survol lorsque la barre latérale n’a pas le focus1861427: les infobulles n’apparaissent plus au survol lorsqu’une autre application a le focus2043757: sous Windows 11, le titre d’un onglet n’apparaît pas au survol lorsque Firefox est partiellement masqué par une autre fenêtre
1 commentaires
Avis de Hacker News
Si vous vous demandez comment on trouve et corrige des bugs dans la base de code de Firefox, Mike Conley diffuse en direct chaque semaine, depuis des années, son travail de développement chez Mozilla.
Une bonne partie des enregistrements montre le processus consistant à choisir un bug dans le backlog et à le traquer très minutieusement jusqu’à le corriger.
Je le recommande particulièrement si vous débutez en programmation et voulez voir à quoi ressemble le travail sur une vraie base de code : https://youtube.com/@mikeconleytoronto
Au début, je faisais du tri de bugs dans l’équipe QA, en vérifiant si le composant Bugzilla était le bon, si les étapes de reproduction tenaient la route, etc.
Même sans aucune expérience professionnelle, c’était très formateur rien que de voir comment un grand projet était géré et comment de vrais développeurs traitaient les corrections et les fonctionnalités ; j’y ai aussi découvert des notions comme diff, patch et CI/CD. À l’époque, avec les nightly builds, ce n’était pas strictement de l’intégration continue, mais l’idée allait dans ce sens.
Plus tard, j’ai appris à compiler l’application, ce qui était particulièrement pénible sous Windows. J’ai compilé Firefox, Thunderbird, ainsi que Mozilla Suite, qui existait encore à l’époque et regroupait navigateur, messagerie, éditeur HTML, etc.
J’ai fini par contribuer moi-même à quelques corrections de bugs. Ce n’était que des fautes de frappe ou des icônes mal alignées, mais savoir que du code réellement utilisé par des millions de personnes allait être déployé, c’était énorme.
Après mon diplôme, cette expérience m’a directement servi dans mon premier emploi. J’ai commencé dans une startup au support IT et en QA, et il n’y avait aucune automatisation de build ni de déploiement. Quelqu’un pouvait pousser dans SVN et personne ne savait pendant plusieurs jours si le build était cassé.
À partir de ce que j’avais appris chez Mozilla, j’ai monté un serveur de build avec quelque chose comme Buildbot, CruiseControl ou Hudson, qui lançait un build à chaque push et envoyait un e-mail à l’équipe en cas d’échec de compilation ou de tests.
C’était assez amusant d’entendre des développeurs expérimentés demander « comment notre responsable IT peut bien savoir faire ça ? », et j’ai pu me créer moi-même ce type de rôle avant même que le mot DevOps n’existe. Tout ça grâce au temps libre passé à bidouiller Mozilla.
Au final, je suis entièrement d’accord : hacker sur le projet Mozilla est un très bon moyen d’acquérir de l’expérience pratique.
Enfin corrigé. J’aimerais que Mozilla fasse davantage de choses comme ça.
L’une des formes les plus agaçantes de ce bug, c’est quand on lance un jeu en plein écran, que la souris est repositionnée, qu’une infobulle apparaît et qu’elle reste affichée par-dessus le jeu.
Le jeu n’aime pas perdre le focus ni devoir gérer Firefox via Alt-Tab, et il arrive qu’on finisse par devoir redémarrer le jeu.
https://www.youtube.com/watch?v=ZSRHeXYDLko&t=2729s
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1479858
J’ai fini par abandonner complètement Firefox il y a environ 10 ans, principalement parce que ce bug me gênait plusieurs fois par jour depuis des années, et qu’à ce moment-là Chrome était devenu assez bon pour le remplacer.
Le contenu de l’infobulle était souvent assez générique, du type « Previous », si bien qu’il fallait redonner le focus à presque toutes les fenêtres Firefox pour comprendre d’où elle venait, et partir à sa recherche jusqu’à ce qu’elle disparaisse était toujours pénible. En plus, elle restait au-dessus de toutes les fenêtres.
Ce qui m’étonne encore plus, c’est que ce comportement n’ait même pas changé par accident pendant toutes ces années. Une impressionnante rétrocompatibilité des bugs.
J’ai toujours mis ce bug sur le dos de divers gestionnaires de fenêtres de bureaux Linux, et je découvre seulement maintenant que le coupable était toujours le même.
Sur les petits écrans, il pouvait être assez pénible parce qu’il masquait des formulaires ou d’autres éléments importants.
J’attends la mise à jour avec impatience, et j’espère que Firefox sera non seulement sans bug pendant les 22 prochaines années, mais qu’il redeviendra aussi une application aussi influente qu’autrefois.
https://phabricator.services.mozilla.com/rMOZILLACENTRAL8ae3...
Si, en voyant cette correction de cinq lignes qui règle ce bug, vous vous dites « j’aurais pu le faire ! », eh bien, en pratique, vous auriez vraiment pu
La vraie question, c’est : « pourquoi ne l’ai-je pas fait ? »
Pour ma part, la réponse tient surtout à la facilité avec laquelle on peut compiler Firefox et lancer la suite de tests
Le long processus de suivi de bug qui vient ensuite, c’est la partie amusante
hg, plusieurs dépôts, un vieux wiki, un build très complexe, Bugzilla, tout cet ensemble rend l’entrée beaucoup trop difficile
Si Firefox était sur GitHub, ou même sur un GitLab auto-hébergé, de sorte qu’on puisse simplement forker, bricoler et lancer la même CI, ce serait une tout autre histoire. J’aimerais que ce soit aussi simple
!doc->HasFocus(IgnoreErrors())Waouh, j’ai toujours pensé que c’était forcément de ma faute. Ça m’a suivi pendant des années, à travers plusieurs versions de Windows et réinstallations
Ça n’arrivait pas souvent, mais assez régulièrement pour que je m’en souvienne
C’est un bug assez intéressant. Beaucoup de gens semblent l’avoir rencontré, et certains disent le voir au moins une fois par jour, mais je n’ai aucun souvenir d’avoir vu ce comportement ces 15 dernières années
Il ne semble pas non plus limité à un système d’exploitation, donc je me demande quelles étaient réellement les conditions qui faisaient apparaître ce bug
Le seul endroit où j’ai vu un bug similaire, c’est LibreWolf, c’est-à-dire un Firefox personnalisé avec une protection de la vie privée renforcée. Mais je suis presque sûr que c’est dû au fait que c’est un flatpak, plutôt qu’au navigateur lui-même. Les autres Firefox que j’utilise n’ont jamais montré ce comportement
Beaucoup de sites web peuvent aussi avoir un problème similaire si les conditions sont réunies
La cause principale semble être une incohérence dans la propagation des événements. On devrait recevoir un événement lorsque le curseur sort, mais parfois on ne le reçoit pas, par exemple parce que la fenêtre perd le focus et que les événements de souris ne sont plus transmis
Sans méthode dédiée pour détecter ce cas de manière fiable, comme
onmouseleaveouonmouseoutdans le DOM, il faut des contournements et des hacks. Par exemple, on peut générer un événement synthétique lorsque la fenêtre perd le focusLa meilleure façon de le décrire, c’est que ça se produit quand je bascule vers un autre bureau virtuel avec un raccourci clavier exactement à l’image où l’infobulle apparaît
C’était une race condition qui demandait un timing très précis, ce qui explique sans doute pourquoi elle était difficile à isoler. Comme elle touche surtout les gens qui utilisent beaucoup les raccourcis clavier, il est aussi très possible que beaucoup d’utilisateurs n’aient pas été affectés
Je suis vraiment content que ce soit corrigé, et j’ai hâte de recevoir cette version de Firefox
Je viens de tester : pour reproduire, il suffit de placer la souris sur une cible d’infobulle et, avant que le popup n’apparaisse, de passer à un autre bureau virtuel alors que Firefox n’est plus la nouvelle application active
Pendant que je joue, j’ai souvent une vidéo YouTube lancée dans un onglet du navigateur, et je cherche des infos sur le jeu dans un autre onglet
Donc il m’arrive souvent d’interagir avec la barre d’onglets juste avant de faire Alt-Tab vers le jeu, et c’est là que l’infobulle se déclenche
Dans mon usage quotidien du navigateur, le curseur est presque toujours au-dessus du contenu du site web, où les infobulles apparaissent rarement
Le déroulé est le suivant : quand on place le curseur sur le contrôle de plein écran du lecteur intégré, l’infobulle « Full screen (f) » apparaît, puis quand on clique sur le contrôle, la vidéo passe en plein écran mais l’infobulle reste affichée au-dessus de la vidéo en cours de lecture
J’utilisais le gestionnaire de fenêtres Marco de MATE sous Linux X11
En revanche, je rencontre souvent un bug inoffensif avec le menu d’extension de la barre personnelle, c’est-à-dire l’icône
>>en haut à droite : au lieu d’afficher seulement les marque-pages qui ne tiennent pas dans la barre, il affiche tous les marque-pages dans une liste déroulanteFait intéressant, ce bug a été enregistré avant même la sortie de la première version de Firefox : https://en.wikipedia.org/wiki/Firefox_early_version_history
C’est impressionnant qu’ils aient réussi à garder l’historique du bug tracker opérationnel aussi longtemps
Oh, enfin. Le bug lié, https://bugzilla.mozilla.org/show_bug.cgi?id=1569439, a été fermé il y a 9 mois, et ça a un peu amélioré les choses
Ce bug concernait simplement le fait que l’infobulle ne disparaissait pas quand on passait à une autre application. Mais elle restait encore affichée quand on passait à un autre espace de travail, ce qui était extrêmement décevant
L’inconvénient, c’est que c’est en quelque sorte un « mauvais » correctif. Les infobulles devraient s’afficher même quand la fenêtre n’a pas le focus. C’est en tout cas le cas dans les applis GTK sous Linux, et Firefox essaie aussi d’imiter ce comportement
Il faudrait corriger la cause racine qui fait que l’infobulle ne disparaît pas quand l’espace de travail change et que le pointeur de la souris n’est en réalité plus au-dessus de la fenêtre
Lien direct vers le patch : https://hg.mozilla.org/mozilla-central/rev/8ae372dc88d1
Si oui, est-ce courant de mettre dans le même commit un changement d’indentation et une modification réelle du code ?
Personnellement, j’aurais probablement d’abord commité le changement d’indentation, puis fait la modification du code dans un deuxième commit