Chrome Version : 58.0.3026.3
This came out of a regression - Issue 699390 - fixed in https://codereview.chromium.org/2737913002/
the Edit Bookmark dialog lost its buttons because LabelButton detects when it gets added to a Widget (via NativeThemeChanged) and decides to redesign itself. Part of this includes changing its preferred size, which would trigger a Layout call.
GridLayout had added the view, but hadn't updated any of its internal state so gave a bogus Layout(), which then "stuck".
I think to catch things like this we should add a scoped guard in GridLayout::AddView(..) which makes any request for GridLayout::Layout(..) or GridLayout::GetPreferredSize(..) to fail fast.
A regression test specifically targeting what happened in DialogClientView in Issue 699390 doesn't really address the root cause, and doesn't help Layout() calls that DialogClientView doesn't have control over. (also it will be kinda obsolete when switching to Harmony since those buttons don't tickle this).
Stack looks like:
views::DialogClientView::Layout [0x00000000205702C6+182] (c:\src\devel\git\chromium\src\ui\views\window\dialog_client_view.cc:166)
views::DialogClientView::ChildPreferredSizeChanged [0x0000000020564084+52] (c:\src\devel\git\chromium\src\ui\views\window\dialog_client_view.cc:251)
views::DialogClientView::ButtonRowContainer::ChildPreferredSizeChanged [0x0000000020564034+52] (c:\src\devel\git\chromium\src\ui\views\window\dialog_client_view.cc:62)
views::View::PreferredSizeChanged [0x000000002052E968+72] (c:\src\devel\git\chromium\src\ui\views\view.cc:1488)
views::LabelButton::ChildPreferredSizeChanged [0x00000000203F093B+43] (c:\src\devel\git\chromium\src\ui\views\controls\button\label_button.cc:559)
views::View::PreferredSizeChanged [0x000000002052E968+72] (c:\src\devel\git\chromium\src\ui\views\view.cc:1488)
views::Label::ResetLayout [0x0000000020414A16+38] (c:\src\devel\git\chromium\src\ui\views\controls\label.cc:834)
views::Label::SetShadows [0x00000000204158D5+69] (c:\src\devel\git\chromium\src\ui\views\controls\label.cc:137)
views::PlatformStyle::ApplyLabelButtonTextStyle [0x000000002051BA36+166] (c:\src\devel\git\chromium\src\ui\views\style\platform_style.cc:93)
views::LabelButton::ResetColorsFromNativeTheme [0x00000000203F2DD3+531] (c:\src\devel\git\chromium\src\ui\views\controls\button\label_button.cc:517)
views::LabelButton::OnNativeThemeChanged [0x00000000203F2981+33] (c:\src\devel\git\chromium\src\ui\views\controls\button\label_button.cc:420)
views::View::PropagateNativeThemeChanged [0x000000002052F698+264] (c:\src\devel\git\chromium\src\ui\views\view.cc:2039)
views::View::AddChildViewAt [0x00000000205257AF+1295] (c:\src\devel\git\chromium\src\ui\views\view.cc:235)
views::View::AddChildView [0x000000002052527F+63] (c:\src\devel\git\chromium\src\ui\views\view.cc:183)
views::GridLayout::AddViewState [0x0000000020505952+306] (c:\src\devel\git\chromium\src\ui\views\layout\grid_layout.cc:941)
views::GridLayout::AddView [0x0000000020505660+560] (c:\src\devel\git\chromium\src\ui\views\layout\grid_layout.cc:736)
views::GridLayout::AddView [0x0000000020505411+81] (c:\src\devel\git\chromium\src\ui\views\layout\grid_layout.cc:723)
views::GridLayout::AddView [0x0000000020505361+321] (c:\src\devel\git\chromium\src\ui\views\layout\grid_layout.cc:718)
views::GridLayout::AddView [0x0000000020505209+41] (c:\src\devel\git\chromium\src\ui\views\layout\grid_layout.cc:711)
views::DialogClientView::SetupLayout [0x000000002067F754+2244] (c:\src\devel\git\chromium\src\ui\views\window\dialog_client_view.cc:400)
views::DialogClientView::UpdateDialogButtons [0x00000000205655F3+19] (c:\src\devel\git\chromium\src\ui\views\window\dialog_client_view.cc:107)
views::DialogClientView::ViewHierarchyChanged [0x000000002056565D+77] (c:\src\devel\git\chromium\src\ui\views\window\dialog_client_view.cc:192)
views::View::ViewHierarchyChangedImpl [0x0000000020533B8F+127] (c:\src\devel\git\chromium\src\ui\views\view.cc:2026)
views::View::PropagateAddNotifications [0x000000002052F29C+220] (c:\src\devel\git\chromium\src\ui\views\view.cc:1997)
views::View::AddChildViewAt [0x0000000020525854+1460] (c:\src\devel\git\chromium\src\ui\views\view.cc:242)
views::NonClientView::ViewHierarchyChanged [0x000000002056A502+130] (c:\src\devel\git\chromium\src\ui\views\window\non_client_view.cc:198)
views::View::ViewHierarchyChangedImpl [0x0000000020533B8F+127] (c:\src\devel\git\chromium\src\ui\views\view.cc:2026)
views::View::PropagateAddNotifications [0x000000002052F29C+220] (c:\src\devel\git\chromium\src\ui\views\view.cc:1997)
views::View::AddChildViewAt [0x0000000020525854+1460] (c:\src\devel\git\chromium\src\ui\views\view.cc:242)
views::View::AddChildView [0x000000002052527F+63] (c:\src\devel\git\chromium\src\ui\views\view.cc:183)
views::internal::RootView::SetContentsView [0x0000000020544DB8+328] (c:\src\devel\git\chromium\src\ui\views\widget\root_view.cc:196)
views::Widget::Init [0x0000000020551CDE+1438] (c:\src\devel\git\chromium\src\ui\views\widget\widget.cc:355)
views::DialogDelegate::CreateDialogWidget [0x00000000205663A6+182] (c:\src\devel\git\chromium\src\ui\views\window\dialog_delegate.cc:46)
Comment 1 by bugdroid1@chromium.org
, Mar 14 2017