Index: chrome/browser/gtk/infobar_gtk.cc |
=================================================================== |
--- chrome/browser/gtk/infobar_gtk.cc (revision 65711) |
+++ chrome/browser/gtk/infobar_gtk.cc (working copy) |
@@ -40,7 +40,8 @@ |
: container_(NULL), |
delegate_(delegate), |
theme_provider_(NULL), |
- arrow_model_(this) { |
+ arrow_model_(this), |
+ cached_infobar_type_(delegate->GetInfoBarType()) { |
// Create |hbox_| and pad the sides. |
hbox_ = gtk_hbox_new(FALSE, kElementPadding); |
@@ -105,14 +106,12 @@ |
} |
void InfoBar::AnimateClose() { |
+ delegate_ = NULL; |
slide_widget_->Close(); |
} |
void InfoBar::Close() { |
- if (delegate_) { |
- delegate_->InfoBarClosed(); |
- delegate_ = NULL; |
- } |
+ delegate_ = NULL; |
delete this; |
} |
@@ -276,9 +275,10 @@ |
} |
void InfoBar::OnCloseButton(GtkWidget* button) { |
- if (delegate_) |
+ if (delegate_) { |
delegate_->InfoBarDismissed(); |
- RemoveInfoBar(); |
+ RemoveInfoBar(); |
+ } |
} |
gboolean InfoBar::OnBackgroundExpose(GtkWidget* sender, |
@@ -292,7 +292,7 @@ |
cairo_pattern_t* pattern = cairo_pattern_create_linear(0, 0, 0, height); |
double top_r, top_g, top_b; |
- GetTopColor(delegate_->GetInfoBarType(), &top_r, &top_g, &top_b); |
+ GetTopColor(cached_infobar_type_, &top_r, &top_g, &top_b); |
cairo_pattern_add_color_stop_rgb(pattern, 0.0, top_r, top_g, top_b); |
double bottom_r, bottom_g, bottom_b; |
@@ -355,8 +355,9 @@ |
private: |
static void OnLinkClick(GtkWidget* button, LinkInfoBar* link_info_bar) { |
- if (link_info_bar->delegate_->AsLinkInfoBarDelegate()-> |
- LinkClicked(gtk_util::DispositionForCurrentButtonPressEvent())) { |
+ if (link_info_bar->delegate_ && |
+ link_info_bar->delegate_->AsLinkInfoBarDelegate()-> |
+ LinkClicked(gtk_util::DispositionForCurrentButtonPressEvent())) { |
link_info_bar->RemoveInfoBar(); |
} |
} |
@@ -426,18 +427,18 @@ |
} |
void ConfirmInfoBar::OnCancelButton(GtkWidget* widget) { |
- if (delegate_->AsConfirmInfoBarDelegate()->Cancel()) |
+ if (delegate_ && delegate_->AsConfirmInfoBarDelegate()->Cancel()) |
RemoveInfoBar(); |
} |
void ConfirmInfoBar::OnOkButton(GtkWidget* widget) { |
- if (delegate_->AsConfirmInfoBarDelegate()->Accept()) |
+ if (delegate_ && delegate_->AsConfirmInfoBarDelegate()->Accept()) |
RemoveInfoBar(); |
} |
void ConfirmInfoBar::OnLinkClicked(GtkWidget* widget) { |
- if (delegate_->AsConfirmInfoBarDelegate()->LinkClicked( |
- gtk_util::DispositionForCurrentButtonPressEvent())) { |
+ if (delegate_ && delegate_->AsConfirmInfoBarDelegate()->LinkClicked( |
+ gtk_util::DispositionForCurrentButtonPressEvent())) { |
RemoveInfoBar(); |
} |
} |