Index: ui/message_center/views/message_list_view.cc |
diff --git a/ui/message_center/views/message_list_view.cc b/ui/message_center/views/message_list_view.cc |
index 164dd00ec3b049a26e36b7d08626d9fa010cc72d..127f3fdc8c4628542486fefdfff39ec06f359872 100644 |
--- a/ui/message_center/views/message_list_view.cc |
+++ b/ui/message_center/views/message_list_view.cc |
@@ -302,21 +302,36 @@ void MessageListView::OnBoundsAnimatorProgressed( |
} |
void MessageListView::OnBoundsAnimatorDone(views::BoundsAnimator* animator) { |
- for (auto* view : deleted_when_done_) |
- delete view; |
- deleted_when_done_.clear(); |
+ bool need_update = false; |
if (clear_all_started_) { |
clear_all_started_ = false; |
+ // TODO(yoshiki): we shouldn't touch views in OnAllNotificationsCleared(). |
+ // Or rename it to like OnAllNotificationsClearing(). |
for (auto& observer : observers_) |
observer.OnAllNotificationsCleared(); |
+ |
+ // Need to update layout after deleting the views. |
+ if (!deleted_when_done_.empty()) |
+ need_update = true; |
} |
+ // None of these views should be deleted. |
+ DCHECK(std::all_of(deleted_when_done_.begin(), deleted_when_done_.end(), |
+ [this](views::View* view) { return Contains(view); })); |
+ |
+ for (auto* view : deleted_when_done_) |
+ delete view; |
+ deleted_when_done_.clear(); |
+ |
if (has_deferred_task_) { |
has_deferred_task_ = false; |
- DoUpdateIfPossible(); |
+ need_update = true; |
} |
+ if (need_update) |
+ DoUpdateIfPossible(); |
+ |
if (GetWidget()) |
GetWidget()->SynthesizeMouseMoveEvent(); |