Infinite loop on hiding control buttons |
|||
Issue descriptionWhat steps will reproduce the problem? (1) Show two arc notifications (2) Close the first one by mouse (3) Close the second one by swipe What is the expected result? Chrome shouldn't crash What happens instead? Chrome crashes. It looks the stack trace is overflow.
,
Oct 5 2017
,
Oct 5 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/88a32c820aea50c2f4adf0bb86a64b64a9f36e07 commit 88a32c820aea50c2f4adf0bb86a64b64a9f36e07 Author: yoshiki iguchi <yoshiki@chromium.org> Date: Thu Oct 05 13:48:31 2017 Add a guard to prevent an infinite loop in arc notification In some case, an infinite loop happens in ArcNotificationContent:: UpdateControlButtonVisiblity() method. The logic is: UpdateControlButtonsVisiblity() tries hiding the control buttons, it generates a mouse exit event, and the event handler calls UpdateControlButtonsVisibility. To prevent that, this patch adds the flag to prevent the calling the method during the method. Bug: 771084 Test: manual Change-Id: I03f9d5c00eb3c7f39bebebec03bfeb51616ca925 Reviewed-on: https://chromium-review.googlesource.com/697406 Reviewed-by: Yuichiro Hanada <yhanada@chromium.org> Reviewed-by: Eliot Courtney <edcourtney@chromium.org> Commit-Queue: Yoshiki Iguchi <yoshiki@chromium.org> Cr-Commit-Position: refs/heads/master@{#506715} [modify] https://crrev.com/88a32c820aea50c2f4adf0bb86a64b64a9f36e07/ui/arc/notification/arc_notification_content_view.cc [modify] https://crrev.com/88a32c820aea50c2f4adf0bb86a64b64a9f36e07/ui/arc/notification/arc_notification_content_view.h
,
Oct 5 2017
,
Nov 13 2017
Not seeing this crash anymore, on M64 dev build (10124.0.0, 64.0.3265.0). |
|||
►
Sign in to add a comment |
|||
Comment 1 by yoshiki@chromium.org
, Oct 3 2017The infinite loop starts from ArcNotificationContentView::UpdateControlButtonsVisibility(). Stack trace: #0 0x00005c5d5b27fcd2 in ash::Shell::GetAllRootWindows() () at ../../ash/shell.cc:310 #1 0x00005c5d5b2848c7 in ash::ShellPort::IsSystemModalWindowOpen() () at ../../ash/shell_port.cc:86 #2 0x00005c5d5b2e2e5a in ash::SystemModalContainerEventFilter::OnEvent(ui::Event*) () at ../../ash/wm/system_modal_container_event_filter.cc:21 #3 0x00005c5d59d3ca29 in ui::EventDispatcher::DispatchEventToEventHandlers(std::vector<ui::EventHandler*, std::allocator<ui::EventHandler*> >*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:191 #4 0x00005c5d59d3c6c5 in ui::EventDispatcher::ProcessEvent(ui::EventTarget*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:127 #5 0x00005c5d59d3c57c in ui::EventDispatcherDelegate::DispatchEvent(ui::EventTarget*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:86 #6 0x00005c5d5a55dae2 in aura::WindowEventDispatcher::DispatchMouseEnterOrExit(aura::Window*, ui::MouseEvent const&, ui::EventType) () at ../../ui/aura/window_event_dispatcher.cc:303 #7 0x00005c5d5a55e3bc in aura::WindowEventDispatcher::DispatchMouseExitToHidingWindow(aura::Window*) () at ../../ui/aura/window_event_dispatcher.cc:178 #8 0x00005c5d5a5590e7 in aura::Window::SetVisible(bool) () at ../../ui/aura/window.cc:716 #9 0x00005c5d59d3ca29 in ui::EventDispatcher::DispatchEventToEventHandlers(std::vector<ui::EventHandler*, std::allocator<ui::EventHandler*> >*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:191 #10 0x00005c5d59d3c6c5 in ui::EventDispatcher::ProcessEvent(ui::EventTarget*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:127 #11 0x00005c5d59d3c57c in ui::EventDispatcherDelegate::DispatchEvent(ui::EventTarget*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:86 #12 0x00005c5d5a55dae2 in aura::WindowEventDispatcher::DispatchMouseEnterOrExit(aura::Window*, ui::MouseEvent const&, ui::EventType) () at ../../ui/aura/window_event_dispatcher.cc:303 #13 0x00005c5d5a55e3bc in aura::WindowEventDispatcher::DispatchMouseExitToHidingWindow(aura::Window*) () at ../../ui/aura/window_event_dispatcher.cc:178 #14 0x00005c5d5a5590e7 in aura::Window::SetVisible(bool) () at ../../ui/aura/window.cc:716 #15 0x00005c5d59d3ca29 in ui::EventDispatcher::DispatchEventToEventHandlers(std::vector<ui::EventHandler*, std::allocator<ui::EventHandler*> >*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:191 #16 0x00005c5d59d3c6c5 in ui::EventDispatcher::ProcessEvent(ui::EventTarget*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:127 #17 0x00005c5d59d3c57c in ui::EventDispatcherDelegate::DispatchEvent(ui::EventTarget*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:86 #18 0x00005c5d5a55dae2 in aura::WindowEventDispatcher::DispatchMouseEnterOrExit(aura::Window*, ui::MouseEvent const&, ui::EventType) () at ../../ui/aura/window_event_dispatcher.cc:303 #19 0x00005c5d5a55e3bc in aura::WindowEventDispatcher::DispatchMouseExitToHidingWindow(aura::Window*) () at ../../ui/aura/window_event_dispatcher.cc:178 #20 0x00005c5d5a5590e7 in aura::Window::SetVisible(bool) () at ../../ui/aura/window.cc:716 #21 0x00005c5d59d3ca29 in ui::EventDispatcher::DispatchEventToEventHandlers(std::vector<ui::EventHandler*, std::allocator<ui::EventHandler*> >*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:191 #22 0x00005c5d59d3c6c5 in ui::EventDispatcher::ProcessEvent(ui::EventTarget*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:127 #23 0x00005c5d59d3c57c in ui::EventDispatcherDelegate::DispatchEvent(ui::EventTarget*, ui::Event*) () at ../../ui/events/event_dispatcher.cc:86 #24 0x00005c5d5a55dae2 in aura::WindowEventDispatcher::DispatchMouseEnterOrExit(aura::Window*, ui::MouseEvent const&, ui::EventType) () at ../../ui/aura/window_event_dispatcher.cc:303 ...