diff options
author | jcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-09 18:55:36 +0000 |
---|---|---|
committer | jcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-09 18:55:36 +0000 |
commit | 9925e36fdbe0830c2f838bfb8d452599069e2e51 (patch) | |
tree | ddf7ac100fdf1683944bdbf8e44f1f19815ff3bc /chrome/browser/views/browser_bubble_gtk.cc | |
parent | 0d5e1febc3208291926fae7c80bfe277b3983ee0 (diff) | |
download | chromium_src-9925e36fdbe0830c2f838bfb8d452599069e2e51.zip chromium_src-9925e36fdbe0830c2f838bfb8d452599069e2e51.tar.gz chromium_src-9925e36fdbe0830c2f838bfb8d452599069e2e51.tar.bz2 |
Making sure the BrowserBubble does not notify its delegate after it's been deleted, in an attempt to fix a crasher.
BUG=46757
TEST=See bug
Review URL: http://codereview.chromium.org/3026060
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55427 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/browser_bubble_gtk.cc')
-rw-r--r-- | chrome/browser/views/browser_bubble_gtk.cc | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/chrome/browser/views/browser_bubble_gtk.cc b/chrome/browser/views/browser_bubble_gtk.cc index 3bbd61a..7f18070 100644 --- a/chrome/browser/views/browser_bubble_gtk.cc +++ b/chrome/browser/views/browser_bubble_gtk.cc @@ -19,8 +19,7 @@ class BubbleWidget : public views::WidgetGtk { public: explicit BubbleWidget(BrowserBubble* bubble) : views::WidgetGtk(views::WidgetGtk::TYPE_WINDOW), - bubble_(bubble), - closed_(false) { + bubble_(bubble) { } void Show(bool activate) { @@ -29,19 +28,19 @@ class BubbleWidget : public views::WidgetGtk { } virtual void Close() { - if (closed_) - return; - closed_ = true; + if (!bubble_) + return; // We have already been closed. if (IsActive()) { BrowserBubble::Delegate* delegate = bubble_->delegate(); if (delegate) delegate->BubbleLostFocus(bubble_, false); } views::WidgetGtk::Close(); + bubble_ = NULL; } virtual void Hide() { - if (IsActive()) { + if (IsActive()&& bubble_) { BrowserBubble::Delegate* delegate = bubble_->delegate(); if (delegate) delegate->BubbleLostFocus(bubble_, false); @@ -50,7 +49,7 @@ class BubbleWidget : public views::WidgetGtk { } virtual void IsActiveChanged() { - if (IsActive() || closed_) + if (IsActive() || !bubble_) return; BrowserBubble::Delegate* delegate = bubble_->delegate(); if (!delegate) { @@ -66,15 +65,13 @@ class BubbleWidget : public views::WidgetGtk { } virtual gboolean OnFocusIn(GtkWidget* widget, GdkEventFocus* event) { - BrowserBubble::Delegate* delegate = bubble_->delegate(); - if (delegate) - delegate->BubbleGotFocus(bubble_); + if (bubble_ && bubble_->delegate()) + bubble_->delegate()->BubbleGotFocus(bubble_); return views::WidgetGtk::OnFocusIn(widget, event); } private: BrowserBubble* bubble_; - bool closed_; DISALLOW_COPY_AND_ASSIGN(BubbleWidget); }; |