| Index: chrome/browser/ui/libgtk2ui/gtk2_ui.cc | 
| diff --git a/chrome/browser/ui/libgtk2ui/gtk2_ui.cc b/chrome/browser/ui/libgtk2ui/gtk2_ui.cc | 
| index bad9a8c7119fe2739a5fc8ca6fb8c615c6f100e8..1ae080f809992c9a08f3ecf787232b6124c448cd 100644 | 
| --- a/chrome/browser/ui/libgtk2ui/gtk2_ui.cc | 
| +++ b/chrome/browser/ui/libgtk2ui/gtk2_ui.cc | 
| @@ -16,6 +16,7 @@ | 
| #include "chrome/browser/themes/theme_properties.h" | 
| #include "chrome/browser/ui/libgtk2ui/app_indicator_icon.h" | 
| #include "chrome/browser/ui/libgtk2ui/chrome_gtk_frame.h" | 
| +#include "chrome/browser/ui/libgtk2ui/gtk2_border.h" | 
| #include "chrome/browser/ui/libgtk2ui/gtk2_util.h" | 
| #include "chrome/browser/ui/libgtk2ui/native_theme_gtk2.h" | 
| #include "chrome/browser/ui/libgtk2ui/print_dialog_gtk2.h" | 
| @@ -163,6 +164,7 @@ struct IDRGtkMapping { | 
| { IDR_HOME_P,    GTK_STOCK_HOME,       GTK_STATE_ACTIVE }, | 
|  | 
| { IDR_RELOAD,    GTK_STOCK_REFRESH,    GTK_STATE_NORMAL }, | 
| +  { IDR_RELOAD_D,  GTK_STOCK_REFRESH,    GTK_STATE_INSENSITIVE }, | 
| { IDR_RELOAD_H,  GTK_STOCK_REFRESH,    GTK_STATE_PRELIGHT }, | 
| { IDR_RELOAD_P,  GTK_STOCK_REFRESH,    GTK_STATE_ACTIVE }, | 
|  | 
| @@ -445,6 +447,13 @@ ui::NativeTheme* Gtk2UI::GetNativeTheme() const { | 
|  | 
| void Gtk2UI::SetUseSystemTheme(bool use_system_theme) { | 
| use_gtk_ = use_system_theme; | 
| + | 
| +  FOR_EACH_OBSERVER(Gtk2Border, border_list_, | 
| +                    InvalidateAndSetUsesGtk(use_system_theme)); | 
| +} | 
| + | 
| +bool Gtk2UI::GetUseSystemTheme() const { | 
| +  return use_gtk_; | 
| } | 
|  | 
| bool Gtk2UI::GetDefaultUsesSystemTheme() const { | 
| @@ -518,6 +527,12 @@ gfx::Image Gtk2UI::GetIconForContentType( | 
| return gfx::Image(image_skia); | 
| } | 
|  | 
| +views::Border* Gtk2UI::CreateNativeBorder( | 
| +    views::CustomButton* owning_button, | 
| +    views::Border* border) { | 
| +  return new Gtk2Border(this, owning_button, border); | 
| +} | 
| + | 
| void Gtk2UI::AddWindowButtonOrderObserver( | 
| views::WindowButtonOrderObserver* observer) { | 
| if (!leading_buttons_.empty() || !trailing_buttons_.empty()) { | 
| @@ -871,6 +886,9 @@ void Gtk2UI::LoadGtkValues() { | 
| GdkColorToSkColor(entry_style->base[GTK_STATE_ACTIVE]); | 
| inactive_selection_fg_color_ = | 
| GdkColorToSkColor(entry_style->text[GTK_STATE_ACTIVE]); | 
| + | 
| +  // Update the insets that we hand to Gtk2Border. | 
| +  UpdateButtonInsets(); | 
| } | 
|  | 
| GdkColor Gtk2UI::BuildFrameColors(GtkStyle* frame_style) { | 
| @@ -1031,6 +1049,7 @@ SkBitmap Gtk2UI::GenerateGtkThemeBitmap(int id) const { | 
| case IDR_HOME_H: | 
| case IDR_HOME_P: | 
| case IDR_RELOAD: | 
| +    case IDR_RELOAD_D: | 
| case IDR_RELOAD_H: | 
| case IDR_RELOAD_P: | 
| case IDR_STOP: | 
| @@ -1265,6 +1284,42 @@ SkBitmap Gtk2UI::DrawGtkButtonBorder(int gtk_state, | 
| return border; | 
| } | 
|  | 
| +gfx::Insets Gtk2UI::GetButtonInsets() const { | 
| +  return button_insets_; | 
| +} | 
| + | 
| +void Gtk2UI::AddGtkBorder(Gtk2Border* border) { | 
| +  border_list_.AddObserver(border); | 
| +} | 
| + | 
| +void Gtk2UI::RemoveGtkBorder(Gtk2Border* border) { | 
| +  border_list_.RemoveObserver(border); | 
| +} | 
| + | 
| +void Gtk2UI::UpdateButtonInsets() { | 
| +  GtkWidget* window = gtk_offscreen_window_new(); | 
| +  GtkWidget* button = gtk_button_new(); | 
| +  gtk_container_add(GTK_CONTAINER(window), button); | 
| + | 
| +  GtkBorder* border = NULL; | 
| +  gtk_widget_style_get(GTK_WIDGET(button), | 
| +                       "default-border", | 
| +                       &border, | 
| +                       NULL); | 
| + | 
| +  gfx::Insets insets; | 
| +  if (border) { | 
| +    button_insets_ = gfx::Insets(border->top, border->left, | 
| +                                 border->bottom, border->right); | 
| +    gtk_border_free(border); | 
| +  } else { | 
| +    // Defined in gtkbutton.c: | 
| +    button_insets_ = gfx::Insets(1, 1, 1, 1); | 
| +  } | 
| + | 
| +  gtk_widget_destroy(window); | 
| +} | 
| + | 
| void Gtk2UI::ClearAllThemeData() { | 
| gtk_images_.clear(); | 
| } | 
|  |