Index: chrome/browser/gtk/options/geolocation_filter_page_gtk.cc |
diff --git a/chrome/browser/gtk/options/geolocation_filter_page_gtk.cc b/chrome/browser/gtk/options/geolocation_filter_page_gtk.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6aacff018edd7b8d135c62d806aec5c7143588e1 |
--- /dev/null |
+++ b/chrome/browser/gtk/options/geolocation_filter_page_gtk.cc |
@@ -0,0 +1,109 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/gtk/options/geolocation_filter_page_gtk.h" |
+ |
+#include "app/l10n_util.h" |
+#include "chrome/browser/host_content_settings_map.h" |
+#include "chrome/browser/gtk/gtk_util.h" |
+#include "chrome/browser/gtk/options/content_exceptions_window_gtk.h" |
+#include "chrome/browser/gtk/options/options_layout_gtk.h" |
+#include "chrome/browser/profile.h" |
+#include "chrome/common/pref_names.h" |
+#include "grit/generated_resources.h" |
+#include "grit/locale_settings.h" |
+ |
+GeolocationFilterPageGtk::GeolocationFilterPageGtk(Profile* profile) |
+ : OptionsPageBase(profile) { |
+ OptionsLayoutBuilderGtk options_builder; |
+ options_builder.AddOptionGroup( |
+ l10n_util::GetStringUTF8(IDS_GEOLOCATION_SETTING_LABEL), |
+ InitGroup(), true); |
+ page_ = options_builder.get_page_widget(); |
+} |
+ |
+GeolocationFilterPageGtk::~GeolocationFilterPageGtk() { |
+} |
+ |
+ |
+GtkWidget* GeolocationFilterPageGtk::InitGroup() { |
+ GtkWidget* vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
+ |
+ ask_radio_ = gtk_radio_button_new_with_label(NULL, |
+ l10n_util::GetStringUTF8(IDS_GEOLOCATION_ASK_ALL_RADIO).c_str()); |
+ gtk_box_pack_start(GTK_BOX(vbox), ask_radio_, FALSE, FALSE, 0); |
+ |
+ block_radio_ = gtk_radio_button_new_with_label_from_widget( |
+ GTK_RADIO_BUTTON(ask_radio_), |
+ l10n_util::GetStringUTF8(IDS_GEOLOCATION_BLOCK_ALL_RADIO).c_str()); |
+ gtk_box_pack_start(GTK_BOX(vbox), block_radio_, FALSE, FALSE, 0); |
+ |
+ allow_radio_ = gtk_radio_button_new_with_label_from_widget( |
+ GTK_RADIO_BUTTON(ask_radio_), |
+ l10n_util::GetStringUTF8(IDS_GEOLOCATION_ALLOW_ALL_RADIO).c_str()); |
+ gtk_box_pack_start(GTK_BOX(vbox), allow_radio_, FALSE, FALSE, 0); |
+ |
+ ContentSetting default_setting = profile()->GetHostContentSettingsMap()-> |
+ GetDefaultContentSetting(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+ // Now that these have been added to the view hierarchy, it's safe to call |
+ // SetChecked() on them. |
+ if (default_setting == CONTENT_SETTING_ASK) { |
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ask_radio_), TRUE); |
+ } else if (default_setting == CONTENT_SETTING_BLOCK) { |
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(block_radio_), TRUE); |
+ } else { |
+ DCHECK(default_setting == CONTENT_SETTING_ALLOW); |
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(allow_radio_), TRUE); |
+ } |
+ |
+ // Now that we've set the default value, we can connect to the radio button's |
+ // toggled signal. |
+ g_signal_connect(G_OBJECT(ask_radio_), "toggled", |
+ G_CALLBACK(OnAskToggled), this); |
+ g_signal_connect(G_OBJECT(block_radio_), "toggled", |
+ G_CALLBACK(OnAskToggled), this); |
+ g_signal_connect(G_OBJECT(allow_radio_), "toggled", |
+ G_CALLBACK(OnAskToggled), this); |
+ |
+ GtkWidget* exceptions_button = gtk_button_new_with_label( |
+ l10n_util::GetStringUTF8(IDS_COOKIES_EXCEPTIONS_BUTTON).c_str()); |
+ g_signal_connect(G_OBJECT(exceptions_button), "clicked", |
+ G_CALLBACK(OnExceptionsClicked), this); |
+ |
+ GtkWidget* hbox = gtk_hbox_new(FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(hbox), exceptions_button, FALSE, FALSE, 0); |
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
+ |
+ return vbox; |
+} |
+ |
+void GeolocationFilterPageGtk::OnAskToggled( |
+ GtkWidget* toggle_button, |
+ GeolocationFilterPageGtk* geolocation_page) { |
+ DCHECK((toggle_button == geolocation_page->ask_radio_) || |
+ (toggle_button == geolocation_page->block_radio_) || |
+ (toggle_button == geolocation_page->allow_radio_)); |
+ |
+ ContentSetting content_setting = CONTENT_SETTING_ASK; |
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( |
+ geolocation_page->block_radio_))) { |
+ content_setting = CONTENT_SETTING_BLOCK; |
+ } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( |
+ geolocation_page->allow_radio_))) { |
+ content_setting = CONTENT_SETTING_ALLOW; |
+ } |
+ geolocation_page->profile()->GetHostContentSettingsMap()-> |
+ SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_GEOLOCATION, |
+ content_setting); |
+} |
+ |
+void GeolocationFilterPageGtk::OnExceptionsClicked( |
+ GtkWidget* button, |
+ GeolocationFilterPageGtk* geolocation_page) { |
+ HostContentSettingsMap* settings_map = |
+ geolocation_page->profile()->GetHostContentSettingsMap(); |
+ ContentExceptionsWindowGtk::ShowExceptionsWindow( |
+ GTK_WINDOW(gtk_widget_get_toplevel(button)), |
+ settings_map, CONTENT_SETTINGS_TYPE_GEOLOCATION); |
+} |