Chrome Version: 70.0.3515.0
OS: desktop
- Create a bubble (views::BubbleDialogDelegateView) with one ScrollView and multiple HoverButton inside it.
- Position the bubble below the mouse cursor and show it.
- DCHECK happens:
base.dll!base::debug::BreakDebugger() Line 21 C++
base.dll!logging::LogMessage::~LogMessage() Line 868 C++
views.dll!views::View::AddChildViewAt(views::View * view, int index) Line 213 C++
views.dll!views::View::AddChildView(views::View * view) Line 185 C++
views.dll!views::ScrollView::SetControlVisibility(views::View * control, bool should_show) Line 797 C++
views.dll!views::ScrollView::UpdateOverflowIndicatorVisibility(const gfx::ScrollOffset & offset) Line 937 C++
views.dll!views::ScrollView::ScrollToOffset(const gfx::ScrollOffset & offset) Line 841 C++
views.dll!views::ScrollView::ScrollContentsRegionToBeVisible(const gfx::Rect & rect) Line 757 C++
views.dll!views::ScrollView::Viewport::ScrollRectToVisible(const gfx::Rect & rect) Line 140 C++
views.dll!views::View::ScrollRectToVisible(const gfx::Rect & rect) Line 1481 C++
views.dll!views::View::ScrollRectToVisible(const gfx::Rect & rect) Line 1481 C++
views.dll!views::View::ScrollRectToVisible(const gfx::Rect & rect) Line 1481 C++
views.dll!views::View::ScrollViewToVisible() Line 1484 C++
views.dll!views::View::Focus() Line 1810 C++
views.dll!views::FocusManager::SetFocusedViewWithReason(views::View * view, views::FocusManager::FocusChangeReason reason) Line 368 C++
views.dll!views::FocusManager::SetFocusedView(views::View * view) Line 176 C++
views.dll!views::View::RequestFocus() Line 1323 C++
chrome.dll!HoverButton::StateChanged() Line 288 C++
views.dll!views::Button::SetState(views::Button::ButtonState state) Line 129 C++
views.dll!views::Button::VisibilityChanged(views::View * starting_from, bool visible) Line 424 C++
views.dll!views::View::VisibilityChangedImpl(views::View * starting_from, bool is_visible) Line 2135 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2130 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2127 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2127 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2127 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2127 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2127 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2127 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2127 C++
views.dll!views::View::PropagateVisibilityNotifications(views::View * start, bool is_visible) Line 2127 C++
views.dll!views::Widget::OnNativeWidgetVisibilityChanged(bool visible) Line 1064 C++
views.dll!views::DesktopWindowTreeHostWin::HandleVisibilityChanged(bool visible) Line 856 C++
views.dll!views::HWNDMessageHandler::OnWindowPosChanged(tagWINDOWPOS * window_pos) Line 2671 C++
views.dll!views::HWNDMessageHandler::_ProcessWindowMessage(HWND__ * hWnd, unsigned int uMsg, unsigned __int64 wParam, __int64 lParam, __int64 & lResult, unsigned long dwMsgMapID) Line 414 C++
views.dll!views::HWNDMessageHandler::OnWndProc(unsigned int message, unsigned __int64 w_param, __int64 l_param) Line 934 C++
gfx.dll!gfx::WindowImpl::WndProc(HWND__ * hwnd, unsigned int message, unsigned __int64 w_param, __int64 l_param) Line 303 C++
gfx.dll!base::win::WrappedWindowProc<&gfx::WindowImpl::WndProc>(HWND__ * hwnd, unsigned int message, unsigned __int64 wparam, __int64 lparam) Line 76 C++
[External Code]
views.dll!views::HWNDMessageHandler::ShowWindowWithState(ui::WindowShowState show_state) Line 636 C++
views.dll!views::DesktopWindowTreeHostWin::ShowWindowWithState(ui::WindowShowState show_state) Line 207 C++
views.dll!views::DesktopNativeWidgetAura::ShowWithWindowState(ui::WindowShowState state) Line 777 C++
views.dll!views::Widget::Show() Line 628 C++
The bubble notifies all child views that the visibility is shown. Thus, ScrollView::PropagateVisibilityNotifications is called and it acquires ScopedChildrenLock. Recursively HoverButton are notified two and the one just below the mouse tries to acquire focus. View makes sure that the focused view is visible and scrolls the content (I'm creating another bug explaining how it's possible that the button isn't visible yet). ScrollView is instructed to scroll. ScrollView::UpdateOverflowIndicatorVisibility adds a separator as a child. ScopedChildrenLock is broken and a DCHECK occurs.
Comment 1 by vasi...@chromium.org
, Aug 7