| Index: chrome/browser/ui/gtk/avatar_menu_item_gtk.cc | 
| diff --git a/chrome/browser/ui/gtk/avatar_menu_item_gtk.cc b/chrome/browser/ui/gtk/avatar_menu_item_gtk.cc | 
| index b0bb3eaaf03aaa050ae329fbe5daab10975434b3..fd6ee9feb8b8eef09c50dee448375e569285b3aa 100644 | 
| --- a/chrome/browser/ui/gtk/avatar_menu_item_gtk.cc | 
| +++ b/chrome/browser/ui/gtk/avatar_menu_item_gtk.cc | 
| @@ -10,6 +10,8 @@ | 
| #include "chrome/browser/ui/gtk/gtk_chrome_link_button.h" | 
| #include "chrome/browser/ui/gtk/gtk_theme_service.h" | 
| #include "chrome/browser/ui/gtk/gtk_util.h" | 
| +#include "chrome/common/chrome_notification_types.h" | 
| +#include "content/public/browser/notification_source.h" | 
| #include "grit/generated_resources.h" | 
| #include "grit/theme_resources.h" | 
| #include "grit/theme_resources_standard.h" | 
| @@ -32,6 +34,12 @@ const int kCheckMarkXOffset = 2; | 
| // elided. | 
| const int kUserNameMaxWidth = 200; | 
|  | 
| +// The color of the item highlight when we're in chrome-theme mode. | 
| +const GdkColor kHighlightColor = GDK_COLOR_RGB(0xe3, 0xed, 0xf6); | 
| + | 
| +// The color of the background when we're in chrome-theme mode. | 
| +const GdkColor kBackgroundColor = GDK_COLOR_RGB(0xff, 0xff, 0xff); | 
| + | 
| }  // namespace | 
|  | 
| AvatarMenuItemGtk::AvatarMenuItemGtk(Delegate* delegate, | 
| @@ -41,10 +49,16 @@ AvatarMenuItemGtk::AvatarMenuItemGtk(Delegate* delegate, | 
| : delegate_(delegate), | 
| item_(item), | 
| item_index_(item_index), | 
| +      theme_service_(theme_service), | 
| status_label_(NULL), | 
| link_alignment_(NULL), | 
| +      edit_profile_link_(NULL), | 
| ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 
| -  Init(theme_service); | 
| +  Init(theme_service_); | 
| + | 
| +  registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, | 
| +                 content::Source<ThemeService>(theme_service_)); | 
| +  theme_service_->InitThemesFor(this); | 
| } | 
|  | 
| AvatarMenuItemGtk::~AvatarMenuItemGtk() { | 
| @@ -73,9 +87,7 @@ gboolean AvatarMenuItemGtk::OnProfileEnter(GtkWidget* widget, | 
| if (event->detail == GDK_NOTIFY_INFERIOR) | 
| return FALSE; | 
|  | 
| -  GtkStyle* style = gtk_rc_get_style(widget); | 
| -  GdkColor highlight_color = style->bg[GTK_STATE_SELECTED]; | 
| -  gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &highlight_color); | 
| +  gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &highlighted_color_); | 
| if (item_.active) { | 
| gtk_widget_hide(status_label_); | 
| gtk_widget_show(link_alignment_); | 
| @@ -89,7 +101,7 @@ gboolean AvatarMenuItemGtk::OnProfileLeave(GtkWidget* widget, | 
| if (event->detail == GDK_NOTIFY_INFERIOR) | 
| return FALSE; | 
|  | 
| -  gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, NULL); | 
| +  gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, unhighlighted_color_); | 
| if (item_.active) { | 
| gtk_widget_show(status_label_); | 
| gtk_widget_hide(link_alignment_); | 
| @@ -102,6 +114,32 @@ void AvatarMenuItemGtk::EditProfile() { | 
| delegate_->EditProfile(item_index_); | 
| } | 
|  | 
| +void AvatarMenuItemGtk::Observe(int type, | 
| +                                const content::NotificationSource& source, | 
| +                                const content::NotificationDetails& details) { | 
| +  DCHECK_EQ(type, chrome::NOTIFICATION_BROWSER_THEME_CHANGED); | 
| +  bool using_native = theme_service_->UsingNativeTheme(); | 
| + | 
| +  if (using_native) { | 
| +    GtkStyle* style = gtk_rc_get_style(widget_.get()); | 
| +    highlighted_color_ = style->bg[GTK_STATE_SELECTED]; | 
| +    unhighlighted_color_ = NULL; | 
| +  } else { | 
| +    highlighted_color_ = kHighlightColor; | 
| +    unhighlighted_color_ = &kBackgroundColor; | 
| +  } | 
| + | 
| +  // Assume that the widget isn't highlighted since theme changes will almost | 
| +  // never happen while we're up. | 
| +  gtk_widget_modify_bg(widget_.get(), GTK_STATE_NORMAL, unhighlighted_color_); | 
| + | 
| +  if (edit_profile_link_) { | 
| +    gtk_chrome_link_button_set_use_gtk_theme( | 
| +        GTK_CHROME_LINK_BUTTON(edit_profile_link_), | 
| +        using_native); | 
| +  } | 
| +} | 
| + | 
| void AvatarMenuItemGtk::OnEditProfileLinkClicked(GtkWidget* link) { | 
| // delegate_->EditProfile() will close the avatar bubble which in turn | 
| // try to destroy this AvatarMenuItemGtk. | 
| @@ -182,11 +220,11 @@ void AvatarMenuItemGtk::Init(GtkThemeService* theme_service) { | 
|  | 
| if (item_.active) { | 
| // The "edit your profile" link. | 
| -    GtkWidget* edit_profile_link = gtk_chrome_link_button_new( | 
| +    edit_profile_link_ = gtk_chrome_link_button_new( | 
| l10n_util::GetStringUTF8(IDS_PROFILES_EDIT_PROFILE_LINK).c_str()); | 
|  | 
| link_alignment_ = gtk_alignment_new(0, 0, 0, 0); | 
| -    gtk_container_add(GTK_CONTAINER(link_alignment_), edit_profile_link); | 
| +    gtk_container_add(GTK_CONTAINER(link_alignment_), edit_profile_link_); | 
|  | 
| // The chrome link button contains a label that won't be shown if the button | 
| // is set to "no show all", so show all first. | 
| @@ -196,7 +234,7 @@ void AvatarMenuItemGtk::Init(GtkThemeService* theme_service) { | 
|  | 
| gtk_box_pack_start(GTK_BOX(item_vbox), link_alignment_, FALSE, FALSE, 0); | 
|  | 
| -    g_signal_connect(edit_profile_link, "clicked", | 
| +    g_signal_connect(edit_profile_link_, "clicked", | 
| G_CALLBACK(OnEditProfileLinkClickedThunk), this); | 
|  | 
| GtkSizeGroup* size_group = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); | 
|  |