22 yıl sonra düzeltilen Firefox tooltip hatası
(bugzilla.mozilla.org)- Firefox arka planda olsa bile tooltip’in önde kalmasına neden olan
tooltip-ghosthatası, Bugzilla’da uzun süre takip edildi ve Firefox 119 dalındaVERIFIED FIXEDdurumuna getirildi - İlk yeniden üretim, araç çubuğundaki bağlantı veya simgenin üzerine fareyi getirip tooltip’i gösterdikten sonra Command-Tab veya Alt-Tab ile başka bir uygulamaya geçildiğinde tooltip’in kaybolmaması şeklindeydi
- Benzer vakalar Mac OS X, Windows, Linux’un yanı sıra Thunderbird, Sunbird ve Lightning’de de görüldü; Firefox 5.0.1’de ise fare yalnızca arka plandaki pencerenin üzerinden geçtiğinde bile tooltip ve mouse-over durumu oluşuyordu
- Son yama,
only show tooltip when document has focusşeklindeydi; yani tooltip artık yalnızca belge odaktayken gösteriliyor ve değişiklikmozilla-centrala8ae372dc88d1revizyonuyla işlendi - QA ekibi, Firefox 106.0.1 ve Ubuntu 22.04’te sorunu orijinal adımlarla yeniden üretip Nightly 120.0a1 yapısında devam etmediğini doğruladı; ardından bazı ilgili regresyon hataları ayrıca bağlandı
Arka plandaki Firefox üzerinde kalan tooltip
- Bug 148624, Firefox arka plandayken bile tooltip’in önde kalması sorununu ele alıyor
- Orijinal başlığı
Tooltips persist in foreground when Firefox is in background, takma adı isetooltip-ghost - Durum
VERIFIED FIXED, hedef kilometre taşı ise 119 Branch - Sınıflandırması
Core :: XUL, tipidefect, önem derecesiS3
İlk yeniden üretim adımları ve beklenen davranış
- İlk raporlanan ortam
Mozilla/5.0 ... Mac OS X ... Gecko/20020602 BuildID: 2002060203idi - Yeniden üretim adımları basitti
- Araç çubuğu simgesi veya bağlantısının üzerine fareyi getirin
- Tooltip görünene kadar bekleyin
- Command-Tab ile Mozilla’yı arka plana gönderin
- Gerçekte küçük sarı tooltip kutusu önde kalmaya devam etti
- Beklenen davranış, Mozilla arka plana geçtiğinde tooltip’in kaybolmasıydı
- İlk raporu yapan kişi, tooltip’in ancak Firefox yeniden öne alınıp fare araç çubuğunun dışına taşındığında kaybolduğunu belirtti
Birden çok platformda süren yeniden üretim örnekleri
- İlk doğrulamadan sonra platform kapsamı Mac OS X’ten All olarak değiştirildi ve aynı sorun Windows XP ile Windows 98’de de yeniden üretildi
- 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 ve Firefox 117.0 gibi sürümlerde de örnekler gelmeye devam etti
- Thunderbird, Sunbird ve Lightning ortamlarında da benzer davranışlar görüldü
- Thunderbird 2.0.0.17 ve Lightning 0.9’da görev penceresi tooltip’inin bildirim penceresinin üzerinde kalmasına dair örnek eklendi
- Thunderbird 102.4.1 ile Firefox 106.0.1 kombinasyonunda da GNU/Linux üzerinde yeniden üretildi
- Firefox 117.0 ve Thunderbird 115.2.0 ile
xfcevexfwmortamlarında da yeniden üretim adımları paylaşıldı
- Bir kullanıcı, sorunun Firefox 115.0.2 ve GNOME 44’te sürdüğünü belirterek
browser.chrome.toolbar_tipsayarıyla tooltip’leri tamamen devre dışı bırakma geçici çözümünü kullandı
Kalıcı tooltip’in ötesindeki etkiler
- Sorun yalnızca açılmış bir tooltip’in ekranda kalması değildi; Firefox arka plandayken fare Firefox penceresindeki ilgili alanın üzerinden geçtiğinde yeni tooltip’lerin görünmesi de doğrulandı
- Firefox 5.0.1’de Transmission öndeyken ve Firefox arka plandayken, farenin Transmission Inspector penceresi üzerinde hareket ettirilmesiyle Firefox tooltip’lerinin tetiklendiği örnek eklendi
- Adblock Plus araç çubuğu düğmesinin büyük tooltip’inin Transmission üzerinde göründüğü örnekler de vardı
- Transmission’ın
Optionstooltip’i ile Firefox’un Google arama kutusu tooltip’inin aynı anda gösterilip üst üste geldiği bir örnek de kayıtlı - Yer imleri araç çubuğu öğelerinde yalnızca tooltip değil, mouse-over durumu da tetikleniyordu
- Yer imi düğmesinin durumu önce değişiyor, kısa süre sonra URL tooltip’i görünüyordu
Open a New Tabiçindeki+düğmesi de arka plan durumunda mouse-over ve tooltip oluşturan istisnalardan biri olarak kaydedildi
Düzeltme yönü ve uygulanan yama
- 2010’ların başındaki tartışmalarda, tooltip zamanlayıcısı çalıştığında pencerenin odağı yoksa tooltip göstermeme yaklaşımı önerildi
- Safari ve Google Chrome, Mac üzerinde öndeki uygulama değilken tooltip göstermeyen karşılaştırma örnekleri olarak kullanıldı
- Son yama açıklaması
only show tooltip when document has focusidi - Yama Phabricator eki olarak yüklendi, ardından
autolandvemozilla-centrala işlendi - Durum
ASSIGNEDdanRESOLVEDe geçti ve çözüm FIXED oldu
QA doğrulaması ve sonraki regresyonlar
- QA ekibi, Firefox 106.0.1 ve Ubuntu 22.04’te orijinal yeniden üretim adımlarıyla sorunu doğruladı
- Aynı yapılandırmada güncel Nightly 120.0a1 sürümünde sorunun artık sürmediği görüldü ve durum VERIFIED olarak değiştirildi
firefox119durumufixeddenverifiede geçirildi- Bir kullanıcı, sorunun yalnızca
MOZ_ENV_XINPUT2=1iken ortaya çıktığını,MOZ_ENV_XINPUT2=0olduğunda kaybolduğunu belirtti; bu durumbug 1809029ile ilişkilendirildi - Daha sonra ilgili regresyonlar olarak şu hatalar bağlandı
1857513: Yer imi kenar çubuğu tooltip’i, kenar çubuğunda odak yokken hover ile görünmüyor1861427: Başka bir uygulama odaktayken hover durumunda tooltip artık görünmüyor2043757: Windows 11’de Firefox başka bir pencere tarafından kısmen örtülüyken sekme başlığı hover ile görünmüyor
1 yorum
Hacker News yorumları
Firefox kod tabanında hataların nasıl bulunup düzeltildiğini merak ediyorsanız, Mike Conley birkaç yıldır Mozilla’da yaptığı geliştirme çalışmalarını her hafta canlı yayınlıyor
Kayıtların önemli bir kısmı, backlog’dan bir hata seçip onu çok titiz biçimde izleyerek yakalama sürecinden oluşuyor
Özellikle programlamaya yeni başladıysanız ve gerçek bir kod tabanında çalışmanın nasıl göründüğünü görmek istiyorsanız öneririm: https://youtube.com/@mikeconleytoronto
Başta QA ekibinde hata triage’ı yapıyordum; Bugzilla bileşeninin doğru olup olmadığını, yeniden üretme adımlarının mantıklı olup olmadığını vb. kontrol ediyordum
Hiç pratik deneyimi olmayan biri olarak bile, büyük ölçekli bir projenin nasıl yürütüldüğünü ve gerçek geliştiricilerin düzeltmeleri ve özellikleri nasıl ele aldığını görmek başlı başına büyük bir öğrenme fırsatıydı; diff, patch, CI/CD gibi kavramlarla da tanıştım. O dönemde nightly build olduğu için teknik olarak sürekli entegrasyon değildi ama yön doğruydu
Sonraları uygulamayı nasıl derleyeceğimi öğrendim; özellikle Windows’ta gerçekten zordu. Firefox, Thunderbird ve o zamanlar hâlâ var olan Mozilla Suite’i derledim; tarayıcı, e-posta, HTML düzenleyici vb. entegre bir yapıdaydı
Sonunda birkaç hata düzeltmesine de bizzat katkıda bulundum. Yazım hatası ya da hizası bozuk bir ikonu düzeltmek gibi şeylerdi ama milyonlarca kişinin gerçekten kullandığı kodun dağıtıma çıktığını hissetmek inanılmazdı
Mezuniyetten sonraki ilk işimde bu deneyim doğrudan işime yaradı. Bir startup’ta IT destek ve QA ile başladım; derleme ve dağıtım otomasyonu hiç yoktu. Biri SVN’e push yapsa bile build’in bozulup bozulmadığı günlerce fark edilmeyebiliyordu
Mozilla’da öğrendiklerime dayanarak Buildbot, CruiseControl, Hudson gibi araçlardan biriyle, push sırasında build alan ve derleme ya da test başarısız olursa ekibe e-posta gönderen bir build sunucusu kurdum
Tecrübeli geliştiricilerin “Bizim IT’ci böyle bir şeyi nereden biliyor?” diye sorması oldukça eğlenceliydi; DevOps terimi ortaya çıkmadan önce bu rolü kendi kendime yaratabilmiştim. Bunların hepsi boş zamanlarımda Mozilla ile uğraşarak öğrendiklerim sayesindeydi
Sonuç olarak Mozilla projesini hack’lemenin pratik deneyim kazanmak için iyi bir yol olduğuna tamamen katılıyorum
Sonunda düzeltilmiş. Mozilla’nın böyle şeyleri daha fazla yapmasını isterim
Bu hatanın en sinir bozucu biçimlerinden biri, tam ekran oyun çalıştırırken farenin yeniden konumlandırılmasıyla bir tooltip çıkması ve bunun oyunun üstünde kalmasıydı
Oyun, Firefox’u ele almak için odağı kaybedip Alt-Tab yapmaktan hoşlanmadığından, sonunda oyunu yeniden başlatmanız gerekebiliyordu
https://www.youtube.com/watch?v=ZSRHeXYDLko&t=2729s
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1479858
Sonunda yaklaşık 10 yıl önce Firefox kullanmayı tamamen bıraktım; ana neden, bu hatanın yıllarca günde birkaç kez canımı sıkması ve o sıralar Chrome’un alternatif olmak için yeterince iyi hale gelmesiydi
Tooltip içeriği de çoğu zaman “Previous” gibi oldukça genel şeyler oluyordu; nereden geldiğini anlamak için neredeyse tüm Firefox pencerelerine tekrar odak vermem gerekiyordu ve o tooltip kaybolana kadar onu aramak her zaman eziyetti. Üstelik tüm pencerelerin üstünde duruyordu
Aradan geçen yıllar boyunca bu davranışın tesadüfen bile değişmemiş olması daha da şaşırtıcı. Etkileyici bir hata geriye dönük uyumluluğu örneği
Bu hatayı hep çeşitli Linux masaüstü pencere yöneticilerine yüklüyordum; suçlunun hep aynı olduğunu şimdi öğrendim
Küçük ekranlarda formları veya diğer önemli öğeleri kapatabildiği için epey can sıkıcı olabiliyordu
Güncellemeyi dört gözle bekliyorum; umarım Firefox önümüzdeki 22 yıl boyunca yalnızca hatasız olmakla kalmaz, eskiden olduğu gibi etkili bir uygulama haline de gelir
https://phabricator.services.mozilla.com/rMOZILLACENTRAL8ae3...
Bu hatayı düzelten beş satırlık değişikliği görüp “Bunu ben de yapabilirdim!” diye düşünüyorsanız, gerçekten yapabilirdiniz
Asıl soru şu: “Neden yapmadım?”
Kendi adıma cevap verecek olursam, mesele Firefox’u derlemenin ve test paketini çalıştırmanın ne kadar kolay olduğu
Ondan sonraki uzun hata takip süreci işin eğlenceli kısmı
hg, birden fazla depo, eski wiki’ler, çok karmaşık bir build süreci, Bugzilla derken tüm sistemin içine girmek çok zor
Firefox GitHub’da, ya da en azından kendi barındırdığı bir GitLab’da olsaydı; sadece fork edip kurcalayabilsem ve aynı CI’ı çalıştırabilseydim, hikâye bambaşka olurdu. Keşke bu kadar kolay olsaydı
!doc->HasFocus(IgnoreErrors())Vay, hep bir şekilde sorunun bende olduğunu sanıyordum. Farklı Windows sürümleri ve yeniden kurulumlar boyunca yıllarca peşimi bırakmadı
Çok sık olmuyordu ama akılda kalacak kadar düzenli gerçekleşiyordu
Oldukça ilginç bir hata. Görünüşe göre birçok kişi yaşamış, hatta bazıları günde en az bir kez gördüğünü söylüyor; ama son 15 yılda bu davranışı bir kez bile gördüğümü hatırlamıyorum
İşletim sistemiyle sınırlı gibi de görünmediğinden, bu hatanın ortaya çıkmasını sağlayan koşulların gerçekte ne olduğunu merak ediyorum
Benzer bir hatayı gördüğüm tek yer LibreWolf’tu; yani gizliliği güçlendirilmiş özelleştirilmiş Firefox. Ama bunun tarayıcının kendisinden ziyade flatpak yüzünden olduğundan neredeyse eminim. Çalıştırdığım diğer Firefox’larda böyle bir davranış hiç görmedim
Birçok web sitesinde de koşullar uygun olduğunda benzer sorunlar oluşuyor
Ana neden olay iletimi tutarsızlığı gibi görünüyor. İmleç dışarı çıktığında bir olay alması gerekiyor, ama örneğin pencere odağı kaybettiği için artık fare olayları iletilmiyor ve bir şekilde o olay alınamıyor
Bu tür durumları güvenilir şekilde algılayan özel bir yöntem, örneğin DOM
onmouseleaveya daonmouseoutgibi bir şey yoksa, geçici çözümler ve hack’ler gerekiyor. Örneğin pencere odağı kaybettiğinde sentetik bir olay üretilebilirEn iyi şöyle açıklayabilirim: Tooltip’in belirdiği tam o frame’de klavye kısayoluyla başka bir sanal masaüstüne geçtiğimde oluyor
Çok hassas zamanlama gerektiren bir yarış durumuymuş ve bu yüzden daraltıp bulması zor olmuş olabilir. Çoğunlukla klavye kısayollarını çok kullananlara denk geldiğinden birçok kişi etkilenmemiş olabilir
Düzeltildiğine gerçekten sevindim ve Firefox’un o sürümünü almayı dört gözle bekliyorum
Az önce test ettim; yeniden üretmek için fareyi tooltip hedefinin üzerine getirip popup çıkmadan önce, Firefox yeni etkin uygulama değilken başka bir sanal masaüstüne geçmek yeterli
Oyun sırasında çoğu zaman bir tarayıcı sekmesinde YouTube videosu açık oluyor, başka bir sekmede de oyunla ilgili bilgi arıyorum
Bu yüzden oyuna Alt-Tab yapmadan hemen önce sekme çubuğuyla etkileşime girmem sık oluyor ve o sırada tooltip tetikleniyor
Günlük tarayıcı kullanımında imleç neredeyse her zaman web sitesi içeriğinin üzerinde oluyor; orada tooltip’ler nadiren ortaya çıkıyor
Akış şöyle: Gömülü oynatıcının tam ekran kontrolünün üzerine imleci getirince “Full screen (f)” tooltip’i çıkıyor; kontrole tıklayınca video tam ekran oluyor ama tooltip oynayan videonun üzerinde kalmaya devam ediyor
Linux X11’de MATE’in Marco pencere yöneticisini kullanıyordum
Yine de yer imleri araç çubuğundaki genişletme menüsünü, yani sağ üstteki
>>simgesini açınca araç çubuğunda gösterilmeyen yer imleri yerine tüm yer imlerinin açılır listede görünmesi gibi zararsız bir hatayı sık yaşıyorumİlginçtir, bu hata Firefox’un ilk sürümü çıkmadan önce kaydedilmiş: https://en.wikipedia.org/wiki/Firefox_early_version_history
Hata takip kaydını bu kadar uzun süre çalışır halde tutmaları etkileyici
Oh, sonunda. İlgili hata olan https://bugzilla.mozilla.org/show_bug.cgi?id=1569439 9 ay önce kapatılmıştı ve bu sayede biraz daha iyi olmuştu
O hata, yalnızca başka bir uygulamaya geçerken araç ipucunun kaybolmaması sorunuydu. Ama başka bir çalışma alanına geçerken hâlâ kalıyordu, bu da çok hayal kırıklığı yaratmıştı
Dezavantajı, bunun bir ölçüde “yanlış” bir düzeltme olması. Araç ipuçları, pencere odakta olmasa da görünmelidir. En azından Linux’taki GTK uygulamalarında böyle ve Firefox da bu davranışı taklit etmeye çalışıyor
Çalışma alanı değiştiği için fare imleci artık gerçekten pencerenin üzerinde olmadığında araç ipucunun kaybolmamasına yol açan temel nedeni düzeltmek gerekiyor
Yamaya doğrudan bağlantı: https://hg.mozilla.org/mozilla-central/rev/8ae372dc88d1
Öyleyse girinti değişikliklerini gerçek kod değişiklikleriyle aynı commit’e koymak yaygın mı?
Şahsen önce girinti değişikliğini commit’ler, ardından ikinci bir commit’te kod değişikliğini yapardım