Closed Bug 1738299 Opened 4 years ago Closed 4 years ago

[Wayland] Regression: in 94.0, password autocomplete menu is either empty or not displayed at all

Categories

(Core :: Widget: Gtk, defect)

Firefox 94
Desktop
Linux
defect

Tracking

()

RESOLVED DUPLICATE of bug 1733620

People

(Reporter: olivier, Unassigned)

References

(Blocks 2 open bugs)

Details

User Agent: Mozilla/5.0 (X11; Linux x86_64; rv:94.0) Gecko/20100101 Firefox/94.0

Steps to reproduce:

This is using the firefox snap from the candidate channel (currently 94.0-2).
The problem cannot be observed with beta builds not packaged as a snap.

  1. browse to https://yari-demos.prod.mdn.mozit.cloud/en-US/docs/Web/HTML/Element/input/password/_sample_.A_simple_password_input.html
  2. Input a password in the only text field on the page
  3. Click the key icon at the left of the address bar
  4. Input a username and click "Save"
  5. Clear the password field on the page
  6. Click the password field

Actual results:

No autocomplete menu is displayed (or sometimes an empty menu that's only 4 or 5 pixels tall and the expected width is displayed, but it cannot be used to view saved passwords and/or interact with them).

Expected results:

A menu should be displayed with one entry for the saved username/password tuple, and a footer that reads "View Saved Logins".

Note that this was working reliably in the 93.0-1 snap (currently in the stable channel), and I can observe the regression as far back as the first 94.0 beta build (94.0b1-1). I ruled out a build dependency update between those two snaps.

The Bugbug bot thinks this bug should belong to the 'Toolkit::Password Manager' component, and is moving the bug to that component. Please revert this change in case you think the bot is wrong.

Component: Untriaged → Password Manager
Product: Firefox → Toolkit

My tests were done on Ubuntu 21.10 (both my desktop and a VM). Interestingly, the issue isn't happening in an Ubuntu 20.04 VM in the default X11 session, but it does in a Wayland session. Same observation in an Ubuntu 21.10 VM. This seems to indicate that the regression is Wayland-specific.

Running the snap with -MOZ_LOG=WidgetPopup:5, I'm getting these logs:

[Parent 26082: Main Thread]: D/WidgetPopup CaptureRollupEvents() [7f114455c000] 1
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::ApplySizeConstraints [7f114455c000] min size 249 4
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::ApplySizeConstraints [7f114455c000] max size 16384 16384
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::Resize [7f114455c000] 250.000000 4.000000
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::ResizeInt [7f114455c000] x:0 y:0 -> w:250 h:4 repaint 1 aMove 0
[Parent 26082: Main Thread]: D/WidgetPopup   ConstrainSize: w:250 h;4
[Parent 26082: Main Thread]: D/WidgetPopup   Need also to move, flushed: 1, bounds were insane: 0
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeMoveResize [7f114455c000] 87,107 -> 250 x 4
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeMoveResizeWaylandPopup [7f114455c000] 87,107 -> 250 x 4
[Parent 26082: Main Thread]: D/WidgetPopup   set size [250, 4]
[Parent 26082: Main Thread]: D/WidgetPopup   fits parent window size, just resize
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::DispatchResized() [7f114455c000] size [250, 4]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::Show [7f114455c000] state 1
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeShow show [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::AddWindowToPopupHierarchy [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup   Topmost window: 7f1165039400 [nsWindow]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::UpdateWaylandPopupHierarchy [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup Widget Popup Hierarchy:
[Parent 26082: Main Thread]: D/WidgetPopup      panel Panel/Utility nsWindow [7f114455c000] Menu 0 Permanent 0 ContextMenu 0 Anchored 0 Visible 0
[Parent 26082: Main Thread]: D/WidgetPopup Layout Popup Hierarchy:
[Parent 26082: Main Thread]: D/WidgetPopup      panel Panel/Utility nsWindow [7f114455c000] Menu 0 Permanent 0 ContextMenu 0 Anchored 0 Visible 0
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHideTooltips
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::CloseAllPopupsBeforeRemotePopup
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyHideByLayout
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyValidateByLayout
[Parent 26082: Main Thread]: D/WidgetPopup   popup [7f114455c000] parent window [7f1165039400] matches layout 1
[Parent 26082: Main Thread]: D/WidgetPopup   first changed popup [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyHideTemporary() [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup   temporary hidding popup [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::HideWaylandPopupWindow: [7f114455c000] remove from list 0
[Parent 26082: Main Thread]: D/WidgetPopup   gtk_widget_is_visible() = 0
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupRemoveClosedPopups: [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyValidateByLayout
[Parent 26082: Main Thread]: D/WidgetPopup   popup [7f114455c000] parent window [7f1165039400] matches layout 1
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyCalculatePositions()
[Parent 26082: Main Thread]: D/WidgetPopup   popup [7f114455c000] set parent window [7f1165039400]
[Parent 26082: Main Thread]: D/WidgetPopup   popup [7f114455c000] bounds [87, 107] -> [250 x 4]
[Parent 26082: Main Thread]: D/WidgetPopup   popup [7f114455c000] layout [87, 107] -> [250 x 4]
[Parent 26082: Main Thread]: D/WidgetPopup   popup [7f114455c000] has toplevel as parent
[Parent 26082: Main Thread]: D/WidgetPopup   popup [7f114455c000] transformed popup coordinates from [87, 107] to [87, 107]
[Parent 26082: Main Thread]: D/WidgetPopup   popup [7f114455c000] matches layout [1] anchored [0] first popup [1] use move-to-rect 1
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupMove [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup   original widget popup position [87, 107]
[Parent 26082: Main Thread]: D/WidgetPopup   relative widget popup position [87, 107]
[Parent 26082: Main Thread]: D/WidgetPopup   relative widget popup offset [0, 0]
[Parent 26082: Main Thread]: D/WidgetPopup   layout popup anchor [87, 85] -> [211, 22]
[Parent 26082: Main Thread]: D/WidgetPopup   final popup rect position [87, 85] -> [211 x 22]
[Parent 26082: Main Thread]: D/WidgetPopup   parentRect gravity: 7 anchor gravity: 1
[Parent 26082: Main Thread]: D/WidgetPopup   popup window cursor offset x: 0 y: 0
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupRemoveNegativePosition() [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup   coordinates are correct
[Parent 26082: Main Thread]: D/WidgetPopup   move-to-rect call
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyShowTemporaryHidden()
[Parent 26082: Main Thread]: D/WidgetPopup Widget Popup Hierarchy:
[Parent 26082: Main Thread]: D/WidgetPopup      panel Panel/Utility nsWindow [7f114455c000] Menu 0 Permanent 0 ContextMenu 0 Anchored 0 Visible 0
[Parent 26082: Main Thread]: D/WidgetPopup Layout Popup Hierarchy:
[Parent 26082: Main Thread]: D/WidgetPopup      panel Panel/Utility nsWindow [7f114455c000] Menu 0 Permanent 0 ContextMenu 0 Anchored 0 Visible 0
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::ShowWaylandWindow: [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup   active move-to-rect callback, show it as is
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::OnSizeAllocate [7f114455c000] 0,0 -> 250 x 4
[Parent 26082: Main Thread]: D/WidgetPopup   Already the same size
[Parent 26082: Main Thread]: D/WidgetPopup configure event [7f114455c000] 0,0 -> 250 x 4 scale 1
[Parent 26082: Main Thread]: D/WidgetPopup GetScreenBounds [7f114455c000] 0,0 -> 250 x 4, unscaled 0,0 -> 250 x 4
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::OnWindowStateEvent [7f114455c000] for 7f114455a260 changed 0x1 new_window_state 0x80
[Parent 26082: Main Thread]: D/WidgetPopup 	early return because no interesting bits changed
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::OnWindowStateEvent [7f114455c000] for 7f114456dcd0 changed 0x1 new_window_state 0x80
[Parent 26082: Main Thread]: D/WidgetPopup 	quick return because IS_MOZ_CONTAINER(aWidget) is true
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::ApplySizeConstraints [7f114455c000] min size 249 4
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::ApplySizeConstraints [7f114455c000] max size 16384 16384
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::Resize [7f114455c000] 250.000000 88.000000
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::ResizeInt [7f114455c000] x:0 y:0 -> w:250 h:88 repaint 1 aMove 0
[Parent 26082: Main Thread]: D/WidgetPopup   ConstrainSize: w:250 h;88
[Parent 26082: Main Thread]: D/WidgetPopup   Need also to move, flushed: 1, bounds were insane: 0
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeMoveResize [7f114455c000] 87,107 -> 250 x 88
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeMoveResizeWaylandPopup [7f114455c000] 87,107 -> 250 x 88
[Parent 26082: Main Thread]: D/WidgetPopup   set size [250, 88]
[Parent 26082: Main Thread]: D/WidgetPopup   fits parent window size, just resize
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::DispatchResized() [7f114455c000] size [250, 88]
[Parent 26082: Main Thread]: D/WidgetPopup NativeMoveResizeCallback [7f114455c000] flipped_x 0 flipped_y 0
[Parent 26082: Main Thread]: D/WidgetPopup   new position [87, 107] -> [250 x 4]
[Parent 26082: Main Thread]: D/WidgetPopup   orig mBounds [87, 107] -> [250 x 88]
[Parent 26082: Main Thread]: D/WidgetPopup   new mBounds [87, 107] -> [250 x 4]
[Parent 26082: Main Thread]: D/WidgetPopup   needSizeUpdate
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::Resize [7f114455c000] 250.000000 4.000000
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::ResizeInt [7f114455c000] x:0 y:0 -> w:250 h:4 repaint 1 aMove 0
[Parent 26082: Main Thread]: D/WidgetPopup   ConstrainSize: w:250 h;4
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeResize [7f114455c000] 250 4
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::DispatchResized() [7f114455c000] size [250, 4]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::DispatchResized() [7f114455c000] size [250, 4]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::SetWindowMouseTransparent(0) [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup received expose event [7f114455c000] 7f114c578e60 0x0 (rects follow):
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::Create() Popup [7f1141ae4c00]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::Create() popup [7f1141ae4c00] type Tooltip
[Parent 26082: Main Thread]: D/WidgetPopup     set parent window [7f1165039400] browser
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeMove [7f1141ae4c00] 0 0
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeMoveResizeWaylandPopup [7f1141ae4c00] 0,0 -> 0 x 0
[Parent 26082: Main Thread]: D/WidgetPopup   Bounds are not sane (width: 0 height: 0)
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::SetWindowMouseTransparent(0) [7f1141ae4c00]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow [7f1141ae4c00] type 3 
[Parent 26082: Main Thread]: D/WidgetPopup 	mShell 7f1144555660 mContainer 7f11432041d0 mGdkWindow 7f114b7fd120 XID 0x0
[Parent 26082: Main Thread]: D/WidgetPopup CaptureRollupEvents() [7f114455c000] 0
[Parent 26082: Main Thread]: D/WidgetPopup ReleaseGrabs
[Parent 26082: Main Thread]: D/WidgetPopup   remove mContainer grab [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::Show [7f114455c000] state 0
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::NativeShow hide [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupMarkAsClosed: [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::UpdateWaylandPopupHierarchy [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup Widget Popup Hierarchy:
[Parent 26082: Main Thread]: D/WidgetPopup      panel Panel/Utility nsWindow [7f114455c000] Menu 0 Permanent 0 ContextMenu 0 Anchored 0 Visible 1
[Parent 26082: Main Thread]: D/WidgetPopup Layout Popup Hierarchy:
[Parent 26082: Main Thread]: D/WidgetPopup     Empty
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHideTooltips
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::CloseAllPopupsBeforeRemotePopup
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyHideByLayout
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyValidateByLayout
[Parent 26082: Main Thread]: D/WidgetPopup   first changed popup [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupHierarchyHideTemporary() [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup   temporary hidding popup [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::HideWaylandPopupWindow: [7f114455c000] remove from list 0
[Parent 26082: Main Thread]: D/WidgetPopup   gtk_widget_is_visible() = 1
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::HideWaylandWindow: [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::WaylandPopupRemoveClosedPopups: [7f114455c000]
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::HideWaylandPopupWindow: [7f114455c000] remove from list 1
[Parent 26082: Main Thread]: D/WidgetPopup   gtk_widget_is_visible() = 0
[Parent 26082: Main Thread]: D/WidgetPopup   last popup was removed, quit.
[Parent 26082: Main Thread]: D/WidgetPopup Widget Popup Hierarchy:
[Parent 26082: Main Thread]: D/WidgetPopup     Empty
[Parent 26082: Main Thread]: D/WidgetPopup Layout Popup Hierarchy:
[Parent 26082: Main Thread]: D/WidgetPopup     Empty
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::OnWindowStateEvent [7f114455c000] for 7f114455a260 changed 0x1 new_window_state 0x81
[Parent 26082: Main Thread]: D/WidgetPopup 	early return because no interesting bits changed
[Parent 26082: Main Thread]: D/WidgetPopup nsWindow::OnWindowStateEvent [7f114455c000] for 7f114456dcd0 changed 0x1 new_window_state 0x81
[Parent 26082: Main Thread]: D/WidgetPopup 	quick return because IS_MOZ_CONTAINER(aWidget) is true

nsWindow::Resize [7f114455c000] 250.000000 4.000000 is consistent with what I'm seeing: a 250 pixels-wide and 4 pixels-tall popup.

And to confirm this is a wayland-specific regression, and not snap-specific, I can reproduce the problem with an upstream beta build when ran with MOZ_ENABLE_WAYLAND=1.

Blocks: wayland, snap
Component: Password Manager → Widget: Gtk
OS: Unspecified → Linux
Product: Toolkit → Core
Hardware: Unspecified → Desktop
Summary: [snap] Regression: in 94.0, password autocomplete menu is either empty or not displayed at all → [Wayland] Regression: in 94.0, password autocomplete menu is either empty or not displayed at all

Possibly a regression caused by bug 1737068 ?

Martin, can you provide insight on whether this regression might have been caused by your recent work on GdkWindow management?

Flags: needinfo?(stransky)

(In reply to Olivier Tilloy from comment #7)

Martin, can you provide insight on whether this regression might have been caused by your recent work on GdkWindow management?

GdkWindow management is 95 only - I'm going to polish that in 95 time frame.

I think this is Bug 1733620 (I missed that regression but it was fortunately backed out for rc2 - build3 which is not ready yet).

Flags: needinfo?(stransky)

Yes, it looks very much like bug 1733620. I'll test cherry-picking https://hg.mozilla.org/releases/mozilla-release/rev/21a4eaae720e in my snap builds to confirm.

And I can confirm that commit fixes the regression. Marking this bug a duplicate, thanks Martin!

Status: UNCONFIRMED → RESOLVED
Closed: 4 years ago
Resolution: --- → DUPLICATE
You need to log in before you can comment on or make changes to this bug.