Remove itself from the widget observers in destructor
This patch may fix the use-after-free reported in crbug.com/612050.
BUG=612050
TEST=msan passes
Review-Url: https://codereview.chromium.org/2031763003
Cr-Commit-Position: refs/heads/master@{#402408}
diff --git a/ui/message_center/views/message_center_bubble.cc b/ui/message_center/views/message_center_bubble.cc
index 5f7d30b..c65587b 100644
--- a/ui/message_center/views/message_center_bubble.cc
+++ b/ui/message_center/views/message_center_bubble.cc
@@ -68,6 +68,10 @@
first_item_has_no_margin_(first_item_has_no_margin) {}
MessageCenterBubble::~MessageCenterBubble() {
+ // Removs this from the widget observers just in case. MessageCenterBubble
+ // might be destoryed without calling its Widget's Close/CloseNow.
+ if (bubble_view() && bubble_view()->GetWidget())
+ bubble_view()->GetWidget()->RemoveObserver(this);
}
void MessageCenterBubble::SetSettingsVisible() {
@@ -124,7 +128,8 @@
}
void MessageCenterBubble::OnWidgetClosing(views::Widget* widget) {
- bubble_view()->GetWidget()->RemoveObserver(this);
+ if (bubble_view() && bubble_view()->GetWidget())
+ bubble_view()->GetWidget()->RemoveObserver(this);
if (message_center_view_)
message_center_view_->SetIsClosing(true);
}