1 ポイント 投稿者 GN⁺ 2023-10-11 | 1件のコメント | WhatsAppで共有
  • Firefoxがバックグラウンドにあってもツールチップが前面に残る tooltip-ghost バグ がBugzillaで長期間追跡され、Firefox 119ブランチで VERIFIED FIXED 状態になった
  • 最初の再現は、ツールバーのリンクやアイコンにマウスを載せて ツールチップを表示した後、Command-TabまたはAlt-Tabで別のアプリに切り替えるとツールチップが消えない、というものだった
  • Mac OS X、Windows、Linuxだけでなく、Thunderbird、Sunbird、Lightningでも類似の事例が続き、Firefox 5.0.1ではバックグラウンドのウィンドウ上をマウスが通過するだけでもツールチップと マウスオーバー状態 が発生した
  • 最終パッチは only show tooltip when document has focus で、ドキュメントに フォーカスがあるときだけ ツールチップを表示するよう変更され、mozilla-central8ae372dc88d1 リビジョンとして反映された
  • QAはFirefox 106.0.1とUbuntu 22.04で元の手順により再現した後、Nightly 120.0a1ビルドでは問題が継続しないことを確認し、その後いくつかの関連リグレッションバグが別途紐付けられた

バックグラウンドのFirefox上に残るツールチップ

  • Bug 148624は、Firefoxがバックグラウンドにあるときでも ツールチップが前面に残る問題 を扱う
  • 元のタイトルは Tooltips persist in foreground when Firefox is in background で、別名は tooltip-ghost
  • 状態は VERIFIED FIXED、対象マイルストーンは 119 Branch
  • 分類は Core :: XUL、タイプは defect、重要度は S3

最初の再現手順と期待される動作

  • 最初の報告環境は Mozilla/5.0 ... Mac OS X ... Gecko/20020602 BuildID: 2002060203 だった
  • 再現手順は単純
    • ツールバーのアイコンまたはリンクにマウスを載せる
    • ツールチップが表示されるまで待つ
    • Command-TabでMozillaをバックグラウンドに送る
  • 実際には 小さな黄色いツールチップボックス が前面に残り続けた
  • 期待される動作は、Mozillaがバックグラウンドに切り替わるときにツールチップが消えることだった
  • 元の報告者は、Firefoxを再び前面に戻してマウスをツールバーの外へ移動しないとツールチップが消えないと記している

複数プラットフォームで続いた再現事例

  • 初期確認後、プラットフォーム範囲はMac OS Xから All に変更され、Windows XPとWindows 98でも同じ問題が再現された
  • 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、Firefox 117.0などでも事例が続いた
  • Thunderbird、Sunbird、Lightning環境でも似た現象が見られた
    • Thunderbird 2.0.0.17とLightning 0.9では、作業ウィンドウのツールチップが通知ウィンドウの上に残る事例が添付された
    • Thunderbird 102.4.1とFirefox 106.0.1の組み合わせでもGNU/Linuxで再現された
    • Firefox 117.0とThunderbird 115.2.0、xfcexfwm 環境でも再現手順が提出された
  • あるユーザーは、Firefox 115.0.2とGNOME 44でも引き続き発生するとして、browser.chrome.toolbar_tips 設定で ツールチップを完全に無効化 する回避策を使っていた

残留ツールチップを超える影響

  • すでに表示されたツールチップが残るだけでなく、Firefoxがバックグラウンドにある間にマウスがFirefoxウィンドウの該当領域上を通過すると 新しいツールチップが現れる症状 も確認された
  • Firefox 5.0.1でTransmissionが前面、Firefoxが背景のとき、Transmission Inspectorウィンドウ上でマウスを動かすとFirefoxのツールチップがトリガーされた事例が添付された
  • Adblock Plusツールバーボタンの大きなツールチップがTransmissionの上に現れた事例もあった
  • Transmissionの Options ツールチップとFirefoxのGoogle検索ボックスのツールチップが同時に表示され、互いに重なった事例も残っている
  • ブックマークツールバー項目では、ツールチップだけでなく マウスオーバー状態 もトリガーされた
    • ブックマークボタンの状態が先に変わり、しばらくしてURLツールチップが表示された
    • Open a New Tab+ ボタンも、バックグラウンド状態でマウスオーバー状態とツールチップが発生する例外として記録された

修正方針と反映されたパッチ

  • 2010年代初頭の議論では、ツールチップタイマーが実行されるときにウィンドウにフォーカスがなければツールチップを表示しない方式が提案された
  • SafariとGoogle Chromeは、Macで前面アプリではないときにツールチップを表示しない比較事例として使われた
  • 最終パッチの説明は only show tooltip when document has focus だった
  • パッチはPhabricator添付として上がり、その後 autolandmozilla-central に反映された
  • 状態は ASSIGNED から RESOLVED に変わり、解決は FIXED になった

QA検証とその後のリグレッション

  • QAはFirefox 106.0.1とUbuntu 22.04で元の再現手順によりイシューを確認した
  • 同じ構成で最新Nightly 120.0a1では問題がもはや継続しないため、状態は VERIFIED に変更された
  • firefox119 状態は fixed から verified に変更された
  • あるユーザーは MOZ_ENV_XINPUT2=1 のときだけ問題が現れ、MOZ_ENV_XINPUT2=0 だと消えると記しており、これは bug 1809029 と結び付けられている
  • その後、関連リグレッションとして次のバグが紐付けられた
    • 1857513: ブックマークサイドバーのツールチップが、サイドバーにフォーカスがないときにホバーで表示されない
    • 1861427: 別のアプリケーションにフォーカスがある状態では、ホバー時にツールチップがもはや表示されない
    • 2043757: Windows 11でFirefoxが別ウィンドウに一部隠れているとき、タブタイトルがホバーで表示されない

1件のコメント

 
GN⁺ 2023-10-11
Hacker News のコメント
  • Firefox のコードベースでバグをどう見つけて修正しているのか気になるなら、Mike Conley が Mozilla での開発作業を何年も毎週ライブ配信している
    録画の多くは、バックログからバグを1つ選び、非常に丁寧に追跡して突き止める過程になっている
    特にプログラミングを始めたばかりで、実際のコードベースで働く様子がどんなものか見たいならおすすめ: https://youtube.com/@mikeconleytoronto

    • 大学時代、このバグが登録されたのとほぼ同じくらい昔に、Mozilla でかなりボランティアをしていた
      最初は QA チームでバグのトリアージをしていて、Bugzilla のコンポーネントが正しいか、再現手順が筋の通ったものか、などを確認していた
      実務経験がまったくない立場でも、大規模プロジェクトがどう運営されているのか、実際の開発者が修正や機能をどう扱っているのかを見るだけで大きな学びになり、diff、patch、CI/CD のような概念にも触れた。当時は nightly build だったので厳密には継続的インテグレーションではなかったが、方向性は合っていた
      その後、アプリのビルド方法を覚えたが、特に Windows では本当に大変だった。Firefox、Thunderbird、そして当時はまだ存在していた Mozilla Suite までビルドした。ブラウザ、メール、HTML エディタなどが統合された形のものだった
      最終的には自分でもバグ修正をいくつか貢献した。誤字やずれたアイコンを直す程度だったが、何百万人もの人が実際に使うコードが配布されるという感覚はすごかった
      卒業後の最初の職場で、この経験がすぐ役に立った。スタートアップで IT サポートと QA から始めたのだが、ビルドとデプロイの自動化がまったくなかった。誰かが SVN に push しても、ビルドが壊れたかどうか数日間わからないことがあり得た
      Mozilla で学んだことをもとに、Buildbot、CruiseControl、Hudson のどれかを使って、push 時にビルドし、コンパイル失敗やテスト失敗時にチームへメールを送るビルドサーバーを作った
      熟練した開発者たちが「うちの IT 担当者が、いったいどうしてこんなことを知っているんだ」と尋ねてくるのはかなり面白かったし、DevOps という言葉が生まれる前から、そういう役割を自分で作り出すことができた。すべて余暇に Mozilla をいじりながら学んだおかげだ
      結局、Mozilla プロジェクトをハックしてみるのは実務経験を得る良い方法だという点には完全に同意する
  • ついに直ったか。Mozilla にはこういうことをもっとやってほしい
    このバグの特にうっとうしい形の1つは、全画面ゲームを起動しているときにマウスが再配置されてツールチップが出て、それがゲームの上に浮いてしまう場合だ
    ゲームは Firefox を処理しようとしてフォーカスを失ったり Alt-Tab されたりするのを嫌うので、結局ゲームを再起動しなければならないことがある

    • ちょうど今、Jonathan Blow が4年前の DevGAMM で行った発表を聞いているところだが、こういう種類の欠陥が反復的なモチーフとして出てくる
      https://www.youtube.com/watch?v=ZSRHeXYDLko&t=2729s
    • いまだに基本的なコンテナータブの挙動が修正されるのを待っている。プロダクト管理が完全に壊れているのではないかと思わざるを得ない
      [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1479858
    • 何年か前、このバグに「自分も遭遇していて、こういう情報がある」という感じのコメントをした記憶がある
      結局、約10年前に Firefox の使用を完全にやめた。主な理由は、このバグが何年もの間、1日に何度も気になっていたことと、その頃には Chrome が代替として十分よくなっていたことだ
      ツールチップの内容も「Previous」のようにかなり一般的な場合が多く、どこから来たのか突き止めるために、ほぼすべての Firefox ウィンドウにもう一度フォーカスを当てる必要があり、そのツールチップが消えるまで探し回るのがいつも苦痛だった。しかも、すべてのウィンドウの上に浮いていた
  • その間の何年ものあいだ、この動作が偶然にでも変わらなかったことのほうが驚きだ。印象的なバグの後方互換性

  • このバグをずっと複数の Linux デスクトップのウィンドウマネージャーのせいにしていたが、犯人がいつも同じだったのだと今になってわかった
    小さな画面ではフォームや他の重要な要素の表示を隠してしまうことがあり、かなり厄介な場合があった
    アップデートが楽しみだし、これからの22年間、Firefox がバグのないだけでなく、昔のように影響力のあるアプリケーションになってほしい

    • それでもウィンドウマネージャーのせいにはし続けると思う。Firefox の外でも、さらには Linux の外でも確かに見たことがある
    • Windows でも発生したし、OS をまたいで他のアプリケーションでも引き続き発生している。特定のコンポーネントや GUI レイヤー1つだけのせいにはできない
    • LibreOffice でも見た気がする
    • 他のところでも発生する。DBeaver でよく見る
    • Fedora/GNOME/X.Org の Chrome でも定期的に遭遇している
  • https://phabricator.services.mozilla.com/rMOZILLACENTRAL8ae3...
    このバグを直す5行の修正を見て「自分にもできたかも!」と思うなら、実際にできたはず
    本当の問いは「なぜやらなかったのか?」ということ
    自分なりに答えるなら、Firefoxをコンパイルしてテストスイートを実行するのがどれだけ簡単かが鍵
    その後の長いバグ追跡プロセスこそが面白い部分

    • 普段使っているソフトウェアにはよく貢献していて、Firefoxにも何かしてみようとしたが、外部の人間には難しすぎて結局あきらめた
      hg、複数のリポジトリ、古いWiki、非常に複雑なビルド、Bugzillaなどが絡んだ全体の仕組みが、参入するにはあまりに大変
      FirefoxがGitHub、あるいはせめてセルフホストのGitLabにあって、ただフォークして触って同じCIを回せるなら、まったく違う話になっていたはず。そんなふうに簡単だったらいいのに
    • この修正は過小評価されている気がする。正直に言うと削除された行がけっこうあり、その行がもともと何をしようとしていたのか深く理解するまでは、自分ならDeleteキーを押す自信はなかったと思う
    • 実際の修正はそれよりさらに単純に見える。本当にこのチェックを1つ追加しただけ: !doc->HasFocus(IgnoreErrors())
  • うわ、ずっと何となく自分が悪いだけだと思っていた。いくつものWindowsバージョンや再インストールを経ても、何年もついて回っていた
    頻繁ではなかったが、記憶に残るくらいには継続的に起きていた

    • ネイティブではないUIツールキットは、どれもツールチップの挙動にごく微妙なバグがあるように思う
    • Mozillaがこの22年間、固定されたツールチップに広告枠を売っていたら、どれだけ稼げただろうと思う。誰かにやられる前に自分たちのバグを収益化すべきだった
    • そう。自分がどうかしているのか、何か壊れたインストールを使っているのだと思っていた
    • 自分もそうだった。自分だけかと思っていたが、LinuxとWindowsの自分の全マシンで発生していた
    • macOSでも少なくとも数年間は同じだった
  • かなり興味深いバグだ。多くの人が遭遇したようで、ある人は1日に少なくとも1回は見ると言っているが、自分はこの15年間で一度もこの挙動を見た記憶がない
    OSに限定されているようにも見えないので、実際にこのバグが表に出る条件が何だったのか気になる
    似たバグを見た唯一の場所はLibreWolf、つまりプライバシー保護を強化したカスタム版Firefoxだ。ただしブラウザ自体のせいというより、flatpakだからだとほぼ確信している。自分が動かしている他のFirefoxでは、そういう挙動を見たことがない

    • こういうバグは複数のGUIシステムで十分によくあるものだと思う。たとえばWindows 10のタスクバーでこの挙動を何度も見たし、抜け出す唯一の方法はカーソルを複数ウィンドウのボタン上に置いてからタスクバーの外へ出すことだった
      多くのWebサイトでも、条件がそろえば似た問題が起きる
      主な原因はイベント配送の不一致に見える。カーソルが出たときにイベントを受け取るべきなのに、たとえばウィンドウがフォーカスを失って、それ以上マウスイベントが配送されなくなる、といった形で何らかの理由で受け取れない
      こうしたケースを安定して検出する専用の方法、たとえばDOMのonmouseleaveonmouseoutのようなものがなければ、回避策やハックが必要になる。たとえばウィンドウがフォーカスを失ったときに合成イベントを生成できる
    • Linux KDE PlasmaでOpenSuse Tumbleweedにネイティブインストールして使っているが、毎日見ていて、たいていは1日に何度も見る
      一番うまく説明するなら、ツールチップが表示されるまさにそのフレームで、キーボードショートカットで別の仮想デスクトップへ切り替えると発生する
      非常に正確なタイミングが必要な競合状態だったので、絞り込むのが難しかったのだと思う。キーボードショートカットを多用する人に主に引っかかるので、多くの人は影響を受けていなかった可能性も高い
      修正されたと聞いて本当にうれしいし、そのバージョンのFirefoxを受け取るのが楽しみ
      いま試してみたところ、再現するには、ツールチップ対象の上にマウスを置き、ポップアップが出る前にFirefoxが新しいアクティブアプリケーションではない状態で別の仮想デスクトップへ切り替えるだけでよい
    • かなりワークフロー特化のバグだ。ほとんどビデオゲームをしているときだけ遭遇する
      ゲーム中はブラウザのタブ1つでYouTube動画を流し、別のタブでゲーム関連情報を調べていることが多い
      そのためゲームへAlt-Tabする直前にタブバーを操作することがよくあり、そのときツールチップがトリガーされる
      普段のブラウザ利用では、カーソルはほぼ常にWebサイトのコンテンツ上にあり、そこではツールチップはめったに発生しない
    • 別のWebページに埋め込まれたYouTube動画を操作するとき、このバグによく遭遇した
      流れはこうだ。埋め込みプレイヤーの全画面コントロール上にカーソルを置くと「Full screen (f)」ツールチップが出て、コントロールをクリックすると動画は全画面になるが、ツールチップは再生中の動画の上にそのまま残る
      Linux X11で、MATEのMarcoウィンドウマネージャを使っていた
    • ゲームでも似たようなものだ。「壊れた」タイトルで有名なスタジオのゲームが出ると、人々が奇妙な出来事のまとめを投稿するが、自分の環境ではそういうことはまったく起きない。生まれつきのバグ耐性かもしれない
      ただし、ブックマークツールバーの拡張メニュー、つまり右上の>>アイコンを開くと、ツールバーに表示されていないブックマークではなく、すべてのブックマークがドロップダウンリストに表示されるという無害なバグにはよく遭遇する
  • 興味深いことに、このバグはFirefoxの最初のバージョンが出る前に登録されていた: https://en.wikipedia.org/wiki/Firefox_early_version_history
    バグトラッカーの履歴をここまで長く動き続けるように保っている点は印象的

    • バグトラッカーの履歴がPhoenix/Firebird時代から続いているのかもしれない
  • おお、ついに。関連バグの https://bugzilla.mozilla.org/show_bug.cgi?id=1569439 は9か月前にクローズされていて、そのおかげで少し改善していた
    そのバグは、単に別のアプリへ切り替えたときにツールチップが消えないという問題だった。ただ、別のワークスペースへ切り替えたときにはまだ残っていて、ものすごくがっかりした
    欠点は、これがある程度「間違った」修正だということ。ツールチップは、ウィンドウにフォーカスがなくても表示されるべきだ。少なくとも Linux の GTK アプリではそうだし、Firefox もその挙動をまねようとしている
    ワークスペースが変わって、マウスポインタが実際にはもうウィンドウ上にないときにツールチップが消えないという根本原因を直すべき

    • 自分がいちばん頻繁に遭遇していたのは TFA のバグではなく、その関連バグだった。しばらく見かけていなかったが、これで理由が分かった
  • パッチへの直接リンク: https://hg.mozilla.org/mozilla-central/rev/8ae372dc88d1

    • これはコミットなのかな?
      だとしたら、インデント変更と実際のコード変更を同じコミットに入れるのは一般的なのだろうか?
      個人的には、まずインデント変更をコミットして、その次の2つ目のコミットでコード変更をしたと思う
    • うわ、このコミットでインデント変更によって変わった行を除くと、この変更には新しいコードが5行しかない!