summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/browser_bubble_gtk.cc
diff options
context:
space:
mode:
authorjcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-09 18:55:36 +0000
committerjcivelli@chromium.org <jcivelli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-09 18:55:36 +0000
commit9925e36fdbe0830c2f838bfb8d452599069e2e51 (patch)
treeddf7ac100fdf1683944bdbf8e44f1f19815ff3bc /chrome/browser/views/browser_bubble_gtk.cc
parent0d5e1febc3208291926fae7c80bfe277b3983ee0 (diff)
downloadchromium_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.cc19
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);
};