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..4b41ae3801fd27817de6c87a6e489446ce3e9a1b 100644 |
--- a/ui/message_center/views/message_list_view.cc |
+++ b/ui/message_center/views/message_list_view.cc |
@@ -302,21 +302,35 @@ 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(); |
+ clear_all_started_ = false; |
Eliot Courtney
2017/06/01 03:40:03
What effect does moving clear_all_started_ to afte
yoshiki
2017/06/01 05:07:58
This change was used in previous CLs but now it is
|
+ |
+ if (!deleted_when_done_.empty()) |
+ need_update = true; |
} |
+ // Ensures that the views are not destroyed yet. |
+ 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(); |