1 points par GN⁺ 2023-10-11 | 1 commentaires | Partager sur WhatsApp
  • 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’état VERIFIED FIXED dans 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-central avec la révision 8ae372dc88d1
  • 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 est tooltip-ghost
  • Son état est VERIFIED FIXED, avec pour jalon cible la branche 119
  • Sa classification est Core :: XUL, son type defect, 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 xfce et xfwm
  • 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_tips pour 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 Options de 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 + de Open a New Tab a 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é à autoland et à 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 firefox119 est passé de fixed à verified
  • Un utilisateur a indiqué que le problème n’apparaissait que lorsque MOZ_ENV_XINPUT2=1, et disparaissait avec MOZ_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 focus
    • 1861427 : les infobulles n’apparaissent plus au survol lorsqu’une autre application a le focus
    • 2043757 : 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

 
GN⁺ 2023-10-11
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

    • À l’université, à peu près à l’époque où ce bug a été ouvert, j’ai beaucoup contribué bénévolement à Mozilla.
      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.

    • Justement, je suis en train d’écouter une présentation de Jonathan Blow à DevGAMM il y a 4 ans, et ce genre de défaut y revient comme un motif récurrent.
      https://www.youtube.com/watch?v=ZSRHeXYDLko&t=2729s
    • J’attends encore que le comportement de base des onglets conteneurs soit corrigé. Difficile de ne pas se dire que la gestion produit est complètement cassée.
      [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1479858
    • Je me souviens avoir commenté ce bug il y a quelques années, dans le genre « moi aussi je le rencontre, et voici quelques infos ».
      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.

    • Cela dit, je pense que je continuerai à blâmer les gestionnaires de fenêtres. Je l’ai clairement vu ailleurs que dans Firefox, et même ailleurs que sous Linux.
    • Ça arrivait aussi sous Windows, et ça continue de se produire dans d’autres applications sur plusieurs systèmes d’exploitation. On ne peut pas incriminer un seul composant ou une seule couche GUI.
    • Il me semble l’avoir aussi vu dans LibreOffice.
    • Ça arrive ailleurs aussi. Je le vois souvent dans DBeaver.
    • Je le rencontre régulièrement aussi dans Chrome sous Fedora/GNOME/X.Org.
  • 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

    • Je contribue souvent aux logiciels que j’utilise au quotidien et j’ai essayé de faire quelque chose aussi sur Firefox, mais c’était trop difficile pour quelqu’un de l’extérieur, alors j’ai simplement abandonné
      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
    • J’ai l’impression que cette correction est sous-estimée. Honnêtement, il y a pas mal de lignes supprimées, et je n’aurais pas osé appuyer sur Suppr avant de comprendre en profondeur ce que ces lignes étaient censées faire à l’origine
    • La vraie correction semble encore plus simple que ça. Elle consiste vraiment seulement à ajouter ce test : !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

    • Tous les toolkits d’UI non natifs semblent avoir des comportements d’infobulles très subtilement bogués
    • Je me demande combien Mozilla aurait pu gagner s’ils avaient vendu de l’espace publicitaire sur les infobulles bloquées pendant ces 22 dernières années. Ils auraient dû monétiser leur bug avant que quelqu’un d’autre ne le fasse
    • Exactement. Je pensais devenir fou, ou utiliser une installation cassée
    • Moi aussi. Je pensais être le seul, mais ça arrivait sur toutes mes machines, sous Linux comme sous Windows
    • Même chose sur macOS depuis au moins quelques années
  • 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

    • Ce genre de bug semble assez courant dans de nombreux systèmes GUI. Par exemple, j’ai beaucoup vu ce comportement dans la barre des tâches de Windows 10, et la seule manière d’en sortir était de placer le curseur sur le bouton des fenêtres multiples puis de le sortir de la barre des tâches
      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 onmouseleave ou onmouseout dans 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 focus
    • Je l’utilise installé nativement sur OpenSuse Tumbleweed avec KDE Plasma sous Linux, et je le vois tous les jours, la plupart du temps plusieurs fois par jour
      La 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
    • C’est un bug très spécifique au flux de travail. Je ne le rencontre quasiment que quand je joue à des jeux vidéo
      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
    • J’ai souvent rencontré ce bug en interagissant avec des vidéos YouTube intégrées dans d’autres pages web
      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
    • C’est pareil avec les jeux. Quand un jeu d’un studio connu pour ses titres « cassés » sort, les gens publient des compilations de choses bizarres qui se produisent, mais chez moi rien de tout ça n’arrive jamais. J’ai peut-être une résistance naturelle aux bugs
      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éroulante
  • Fait 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

    • Il est possible que l’historique du bug tracker remonte à l’époque de Phoenix/Firebird
  • 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

    • Celui que je rencontrais le plus souvent, ce n’était pas le bug de TFA, mais ce bug lié. Je ne l’avais pas vu depuis un moment, et je comprends maintenant pourquoi
  • Lien direct vers le patch : https://hg.mozilla.org/mozilla-central/rev/8ae372dc88d1

    • C’est ça, le commit ?
      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
    • Wow, si on exclut les lignes modifiées à cause du changement d’indentation dans le commit, cette modification ne contient que cinq nouvelles lignes de code !