Lỗi tooltip của Firefox được sửa sau 22 năm
(bugzilla.mozilla.org)- Lỗi
tooltip-ghostkhiến tooltip vẫn ở tiền cảnh ngay cả khi Firefox chạy nền đã được theo dõi rất lâu trên Bugzilla, và đã chuyển sang trạng tháiVERIFIED FIXEDtrong nhánh Firefox 119 - Cách tái hiện ban đầu là di chuột lên liên kết hoặc biểu tượng trên thanh công cụ để hiển thị tooltip, rồi dùng Command-Tab hoặc Alt-Tab để chuyển sang ứng dụng khác thì tooltip không biến mất
- Các trường hợp tương tự tiếp tục xuất hiện không chỉ trên Mac OS X, Windows, Linux mà còn trong Thunderbird, Sunbird và Lightning; trên Firefox 5.0.1, chỉ cần di chuột qua cửa sổ nền là cũng có thể kích hoạt tooltip và trạng thái mouseover
- Bản vá cuối cùng là
only show tooltip when document has focus, đổi hành vi để chỉ hiển thị tooltip khi tài liệu có focus, và đã được đưa vàomozilla-centralở revision8ae372dc88d1 - QA đã tái hiện theo quy trình gốc trên Firefox 106.0.1 và Ubuntu 22.04, sau đó xác nhận sự cố không còn tiếp diễn trên bản dựng Nightly 120.0a1; về sau một số lỗi hồi quy liên quan được liên kết riêng
Tooltip còn treo trên Firefox chạy nền
- Bug 148624 nói về vấn đề tooltip vẫn nằm ở tiền cảnh ngay cả khi Firefox đang ở nền
- Tiêu đề gốc là
Tooltips persist in foreground when Firefox is in background, bí danh làtooltip-ghost - Trạng thái là
VERIFIED FIXED, mốc mục tiêu là 119 Branch - Phân loại là
Core :: XUL, kiểu làdefect, mức độ nghiêm trọng làS3
Các bước tái hiện ban đầu và hành vi mong đợi
- Môi trường được báo cáo đầu tiên là
Mozilla/5.0 ... Mac OS X ... Gecko/20020602 BuildID: 2002060203 - Các bước tái hiện rất đơn giản
- Di chuột lên biểu tượng thanh công cụ hoặc liên kết
- Chờ cho tooltip xuất hiện
- Dùng Command-Tab để đưa Mozilla xuống nền
- Trên thực tế, hộp tooltip màu vàng nhỏ vẫn tiếp tục nằm ở tiền cảnh
- Hành vi mong đợi là tooltip phải biến mất khi Mozilla chuyển xuống nền
- Người báo cáo ban đầu cho biết phải đưa Firefox trở lại tiền cảnh rồi di chuột ra khỏi thanh công cụ thì tooltip mới biến mất
Các trường hợp tái hiện trên nhiều nền tảng
- Sau xác nhận ban đầu, phạm vi nền tảng đã được đổi từ Mac OS X sang All, và cùng lỗi cũng tái hiện được trên Windows XP và Windows 98
- Các trường hợp tiếp tục xuất hiện trên 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 v.v.
- Hiện tượng tương tự cũng xuất hiện trong Thunderbird, Sunbird và Lightning
- Với Thunderbird 2.0.0.17 và Lightning 0.9, có đính kèm trường hợp tooltip của cửa sổ tác vụ vẫn nằm trên cửa sổ thông báo
- Với tổ hợp Thunderbird 102.4.1 và Firefox 106.0.1, lỗi cũng được tái hiện trên GNU/Linux
- Với Firefox 117.0 và Thunderbird 115.2.0 trong môi trường
xfcevàxfwm, quy trình tái hiện cũng đã được gửi lên
- Một người dùng cho biết lỗi vẫn xảy ra trên Firefox 115.0.2 và GNOME 44, và đã dùng thiết lập
browser.chrome.toolbar_tipsđể tắt hẳn tooltip như một cách lách tạm thời
Ảnh hưởng vượt ra ngoài tooltip bị kẹt lại
- Không chỉ tooltip đã hiện sẵn bị kẹt lại, mà còn xác nhận được hiện tượng tooltip mới vẫn xuất hiện nếu trong lúc Firefox đang ở nền, con trỏ chuột đi qua vùng tương ứng của cửa sổ Firefox
- Trên Firefox 5.0.1, có đính kèm trường hợp khi Transmission ở tiền cảnh còn Firefox ở nền, việc di chuyển chuột trên cửa sổ Transmission Inspector lại kích hoạt tooltip của Firefox
- Cũng từng có trường hợp tooltip lớn của nút thanh công cụ Adblock Plus hiện chồng lên Transmission
- Có ghi nhận trường hợp tooltip
Optionscủa Transmission và tooltip của ô tìm kiếm Google trong Firefox cùng hiển thị và chồng lên nhau - Với các mục trên thanh dấu trang, không chỉ tooltip mà cả trạng thái mouseover cũng bị kích hoạt
- Trạng thái của nút dấu trang đổi trước, rồi một lúc sau tooltip URL xuất hiện
- Nút
+củaOpen a New Tabcũng được ghi nhận là ngoại lệ có thể phát sinh trạng thái mouseover và tooltip ngay cả khi ở nền
Hướng sửa và bản vá đã được áp dụng
- Trong các thảo luận đầu thập niên 2010, đã có đề xuất không hiển thị tooltip nếu cửa sổ không có focus vào thời điểm bộ đếm thời gian tooltip chạy
- Safari và Google Chrome được dùng làm ví dụ so sánh trên Mac, vì chúng không hiển thị tooltip khi không phải ứng dụng ở tiền cảnh
- Mô tả bản vá cuối cùng là
only show tooltip when document has focus - Bản vá được đưa lên dưới dạng tệp đính kèm Phabricator, rồi sau đó được hợp nhất vào
autolandvàmozilla-central - Trạng thái được đổi từ
ASSIGNEDsangRESOLVED, và kết quả xử lý là FIXED
Xác minh QA và các hồi quy tiếp theo
- QA đã xác nhận lỗi theo đúng quy trình tái hiện ban đầu trên Firefox 106.0.1 và Ubuntu 22.04
- Trên cùng cấu hình đó, ở bản Nightly 120.0a1 mới nhất, lỗi không còn tiếp diễn nên trạng thái được đổi thành VERIFIED
- Trạng thái
firefox119được đổi từfixedsangverified - Một người dùng cho biết lỗi chỉ xuất hiện khi
MOZ_ENV_XINPUT2=1và biến mất khiMOZ_ENV_XINPUT2=0; trường hợp này được liên kết vớibug 1809029 - Về sau các lỗi hồi quy liên quan sau đây đã được liên kết
1857513: tooltip ở thanh bên dấu trang không xuất hiện khi hover nếu thanh bên không có focus1861427: tooltip không còn xuất hiện khi hover nếu một ứng dụng khác đang được focus2043757: trên Windows 11, tiêu đề tab không còn hiện khi hover nếu Firefox bị cửa sổ khác che khuất một phần
1 bình luận
Ý kiến trên Hacker News
Nếu bạn tò mò cách tìm và sửa lỗi trong codebase của Firefox, Mike Conley đã livestream hằng tuần trong vài năm qua về công việc phát triển mà anh ấy làm tại Mozilla
Phần lớn nội dung đã ghi lại là quá trình chọn một lỗi trong backlog rồi lần theo và xử lý cực kỳ tỉ mỉ
Đặc biệt khuyến nghị nếu bạn mới bắt đầu lập trình và muốn xem làm việc trên một codebase thực tế trông như thế nào: https://youtube.com/@mikeconleytoronto
Ban đầu tôi làm phân loại lỗi trong nhóm QA, kiểm tra xem component trong Bugzilla có đúng không, các bước tái hiện có hợp lý không, v.v.
Dù hoàn toàn chưa có kinh nghiệm thực tế, chỉ riêng việc quan sát một dự án quy mô lớn vận hành ra sao, các nhà phát triển thật sự xử lý bản sửa lỗi và tính năng như thế nào cũng đã học được rất nhiều; tôi cũng tiếp xúc với các khái niệm như diff, patch, CI/CD. Khi đó là nightly build nên nói nghiêm ngặt thì chưa phải tích hợp liên tục, nhưng hướng đi là như vậy
Sau đó tôi học cách build ứng dụng, đặc biệt trên Windows thì thật sự vất vả. Tôi đã build Firefox, Thunderbird, và cả Mozilla Suite khi đó vẫn còn tồn tại, một dạng tích hợp trình duyệt, email, trình soạn thảo HTML, v.v.
Cuối cùng tôi cũng đóng góp được vài bản sửa lỗi. Chỉ ở mức sửa lỗi chính tả hay biểu tượng lệch, nhưng cảm giác đoạn code do mình sửa được phát hành cho hàng triệu người dùng thật sự rất lớn
Kinh nghiệm này giúp ích ngay trong công việc đầu tiên sau khi tốt nghiệp. Tôi bắt đầu ở một startup với vai trò hỗ trợ IT và QA, nơi hoàn toàn không có tự động hóa build và triển khai. Ai đó push lên SVN mà build có hỏng hay không thì có khi vài ngày sau vẫn không biết
Dựa trên những gì học được ở Mozilla, tôi dùng một thứ gì đó trong số Buildbot, CruiseControl, Hudson để tạo một máy chủ build: build khi có push và gửi email cho nhóm nếu biên dịch hoặc test thất bại
Việc các lập trình viên giàu kinh nghiệm hỏi “sao người phụ trách IT của chúng ta lại biết mấy thứ này?” khá thú vị, và tôi đã có thể tự tạo ra vai trò kiểu đó từ trước khi có thuật ngữ DevOps. Tất cả là nhờ những gì tôi học được khi mày mò Mozilla trong thời gian rảnh
Vì vậy tôi hoàn toàn đồng ý rằng hack thử dự án Mozilla là một cách tốt để có kinh nghiệm thực tế
Cuối cùng cũng được sửa. Mong Mozilla làm nhiều việc như thế này hơn
Một trong những dạng khó chịu nhất của lỗi này là khi chạy game toàn màn hình, con trỏ chuột bị đặt lại vị trí làm tooltip hiện ra, rồi nó nổi lên trên game
Game không thích bị mất focus và Alt-Tab để xử lý Firefox, nên đôi khi rốt cuộc phải khởi động lại game
https://www.youtube.com/watch?v=ZSRHeXYDLko&t=2729s
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=1479858
Cuối cùng, khoảng 10 năm trước tôi đã bỏ hẳn Firefox; lý do chính là lỗi này gây khó chịu nhiều lần mỗi ngày trong suốt nhiều năm, và vào khoảng đó Chrome đã đủ tốt để thay thế
Nội dung tooltip cũng thường khá chung chung như “Previous”, nên tôi gần như phải focus lại từng cửa sổ Firefox để tìm xem nó đến từ đâu, và lúc nào cũng rất cực khi phải dò cho đến khi tooltip đó biến mất. Hơn nữa nó còn nổi trên tất cả các cửa sổ
Điều còn đáng ngạc nhiên hơn là trong suốt nhiều năm đó, hành vi này thậm chí không vô tình thay đổi. Đúng là tương thích ngược với bug ấn tượng
Tôi luôn đổ lỗi lỗi này cho nhiều trình quản lý cửa sổ desktop trên Linux, giờ mới biết thủ phạm lúc nào cũng là cùng một thứ
Trên màn hình nhỏ, đôi khi khá phiền vì nó có thể che mất biểu mẫu hoặc các yếu tố quan trọng khác
Tôi mong chờ bản cập nhật, và hy vọng trong 22 năm tới Firefox không chỉ sạch lỗi mà còn trở lại là một ứng dụng có tầm ảnh hưởng như trước
https://phabricator.services.mozilla.com/rMOZILLACENTRAL8ae3...
Nếu nhìn vào bản sửa chỉ năm dòng để khắc phục lỗi này và nghĩ “mình cũng làm được!”, thì thực ra đúng là bạn đã có thể làm được
Câu hỏi thật sự là “vì sao mình không làm?”
Tự trả lời thì mấu chốt nằm ở việc biên dịch Firefox và chạy bộ kiểm thử dễ đến mức nào
Quy trình truy vết lỗi dài sau đó mới là phần thú vị
Toàn bộ hệ thống gồm hg, nhiều kho lưu trữ, wiki cũ, quy trình build cực kỳ phức tạp, Bugzilla, v.v. khiến việc bắt đầu quá khó
Nếu Firefox nằm trên GitHub, hoặc ít nhất là GitLab tự host, để chỉ cần fork, vọc thử và chạy cùng CI thì câu chuyện đã hoàn toàn khác. Ước gì nó dễ như vậy
!doc->HasFocus(IgnoreErrors())Chà, tôi luôn nghĩ không hiểu sao đó là lỗi của mình. Nó theo tôi suốt nhiều năm qua nhiều phiên bản Windows và nhiều lần cài lại
Không xảy ra thường xuyên, nhưng vẫn đều đặn đủ để nhớ
Đây là một lỗi khá thú vị. Có vẻ rất nhiều người gặp phải, có người nói thấy ít nhất một lần mỗi ngày, nhưng trong 15 năm qua tôi không nhớ mình từng thấy hành vi này lần nào
Nó cũng có vẻ không bị giới hạn theo hệ điều hành, nên tôi tò mò điều kiện thực sự khiến lỗi này lộ ra là gì
Nơi duy nhất tôi từng thấy lỗi tương tự là LibreWolf, tức bản Firefox tùy biến tăng cường quyền riêng tư. Nhưng tôi gần như chắc chắn đó là do flatpak chứ không phải do chính trình duyệt. Các Firefox khác tôi chạy chưa bao giờ có hành vi như vậy
Nhiều website cũng gặp vấn đề tương tự nếu đủ điều kiện
Nguyên nhân chính có vẻ là sự không nhất quán trong truyền sự kiện. Khi con trỏ rời đi thì phải nhận được sự kiện, nhưng đôi khi lại không nhận được, chẳng hạn vì cửa sổ mất focus nên không còn được truyền sự kiện chuột nữa
Nếu không có một cách chuyên dụng để phát hiện đáng tin cậy các trường hợp này, như DOM
onmouseleavehayonmouseout, thì cần workaround và hack. Chẳng hạn có thể tạo sự kiện tổng hợp khi cửa sổ mất focusMô tả sát nhất là nó xảy ra khi chuyển sang desktop ảo khác bằng phím tắt đúng vào frame tooltip xuất hiện
Có vẻ đây là một race condition cần thời điểm rất chính xác, nên khó khoanh vùng. Vì chủ yếu dính với những người dùng nhiều phím tắt, nhiều người có thể không bị ảnh hưởng
Tôi thật sự rất vui vì nó đã được sửa, và mong sớm nhận được phiên bản Firefox đó
Vừa thử lại thì chỉ cần đặt chuột lên đối tượng có tooltip rồi, trước khi popup xuất hiện, chuyển sang desktop ảo khác trong lúc Firefox không phải ứng dụng đang hoạt động mới là tái hiện được
Khi chơi game, tôi thường mở video YouTube ở một tab trình duyệt, còn tab khác thì tra thông tin liên quan đến game
Vì vậy tôi hay tương tác với thanh tab ngay trước khi Alt-Tab sang game, và lúc đó tooltip bị kích hoạt
Trong lúc dùng trình duyệt thông thường, con trỏ hầu như luôn ở trên nội dung website, nơi tooltip hiếm khi xuất hiện
Luồng là thế này. Khi đưa con trỏ lên nút toàn màn hình của trình phát nhúng, tooltip “Full screen (f)” hiện ra; bấm nút đó thì video chuyển sang toàn màn hình nhưng tooltip vẫn nằm nguyên trên video đang phát
Tôi dùng trình quản lý cửa sổ Marco của MATE trên Linux X11
Tuy nhiên tôi thường gặp một bug vô hại: khi mở menu mở rộng của thanh công cụ dấu trang, tức biểu tượng
>>ở góc trên bên phải, danh sách thả xuống hiển thị tất cả dấu trang thay vì chỉ các dấu trang không hiện trên thanh công cụThú vị là bug này được đăng ký trước cả khi phiên bản Firefox đầu tiên ra đời: https://en.wikipedia.org/wiki/Firefox_early_version_history
Thật ấn tượng khi họ giữ cho lịch sử trình theo dõi bug hoạt động lâu đến vậy
Ồ, cuối cùng cũng xong. Lỗi liên quan https://bugzilla.mozilla.org/show_bug.cgi?id=1569439 đã được đóng 9 tháng trước, và nhờ vậy tình hình có khá hơn một chút
Lỗi đó chỉ đơn giản là tooltip không biến mất khi chuyển sang ứng dụng khác. Nhưng khi chuyển sang workspace khác thì nó vẫn còn đó, nên cực kỳ thất vọng
Điểm trừ là bản sửa này ở mức nào đó là một cách sửa “sai”. Tooltip vẫn nên hiện ngay cả khi cửa sổ không có focus. Ít nhất là trong các ứng dụng GTK trên Linux thì như vậy, và Firefox cũng cố bắt chước hành vi đó
Cần sửa nguyên nhân gốc rễ khiến tooltip không biến mất khi workspace thay đổi và con trỏ chuột thực sự không còn nằm trên cửa sổ nữa
Liên kết trực tiếp tới bản vá: https://hg.mozilla.org/mozilla-central/rev/8ae372dc88d1
Nếu vậy thì việc đưa thay đổi thụt lề và thay đổi mã thực tế vào cùng một commit có phổ biến không?
Cá nhân tôi có lẽ sẽ commit thay đổi thụt lề trước, rồi sau đó commit thứ hai cho thay đổi mã