diff options
author | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-07 13:58:47 +0000 |
---|---|---|
committer | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-07 13:58:47 +0000 |
commit | 526fc024687de776e518fa18c86017ab8cecfdd9 (patch) | |
tree | b737c4af43d71ad72da522078cf6469c2c5d65d5 /chrome/browser/gtk | |
parent | c5c6c8c9a905f7c6d4086c1f22ff7037a69c3155 (diff) | |
download | chromium_src-526fc024687de776e518fa18c86017ab8cecfdd9.zip chromium_src-526fc024687de776e518fa18c86017ab8cecfdd9.tar.gz chromium_src-526fc024687de776e518fa18c86017ab8cecfdd9.tar.bz2 |
Add policy to control 'show password' facility in the password manager.
BUG=49609
TEST=Manual
Review URL: http://codereview.chromium.org/3299010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58692 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r-- | chrome/browser/gtk/options/passwords_page_gtk.cc | 53 | ||||
-rw-r--r-- | chrome/browser/gtk/options/passwords_page_gtk.h | 16 |
2 files changed, 59 insertions, 10 deletions
diff --git a/chrome/browser/gtk/options/passwords_page_gtk.cc b/chrome/browser/gtk/options/passwords_page_gtk.cc index 19f8c2a..af4d846 100644 --- a/chrome/browser/gtk/options/passwords_page_gtk.cc +++ b/chrome/browser/gtk/options/passwords_page_gtk.cc @@ -13,6 +13,8 @@ #include "chrome/browser/gtk/gtk_tree.h" #include "chrome/browser/gtk/gtk_util.h" #include "chrome/browser/prefs/pref_service.h" +#include "chrome/common/notification_details.h" +#include "chrome/common/notification_type.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "gfx/gtk_util.h" @@ -40,6 +42,9 @@ enum { PasswordsPageGtk::PasswordsPageGtk(Profile* profile) : populater(this), password_showing_(false), profile_(profile) { + allow_show_passwords_.Init(prefs::kPasswordManagerAllowShowPasswords, + profile->GetPrefs(), + this); remove_button_ = gtk_button_new_with_label( l10n_util::GetStringUTF8(IDS_PASSWORDS_PAGE_VIEW_REMOVE_BUTTON).c_str()); @@ -55,6 +60,7 @@ PasswordsPageGtk::PasswordsPageGtk(Profile* profile) // We start with the "hide password" text but change it in the realize event. show_password_button_ = gtk_button_new_with_label( l10n_util::GetStringUTF8(IDS_PASSWORDS_PAGE_VIEW_HIDE_BUTTON).c_str()); + gtk_widget_set_no_show_all(show_password_button_, true); gtk_widget_set_sensitive(show_password_button_, FALSE); g_signal_connect(show_password_button_, "clicked", G_CALLBACK(OnShowPasswordButtonClickedThunk), this); @@ -62,6 +68,7 @@ PasswordsPageGtk::PasswordsPageGtk(Profile* profile) G_CALLBACK(OnShowPasswordButtonRealizedThunk), this); password_ = gtk_label_new(""); + gtk_widget_set_no_show_all(password_, true); GtkWidget* buttons = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); gtk_box_pack_start(GTK_BOX(buttons), remove_button_, FALSE, FALSE, 0); @@ -84,6 +91,9 @@ PasswordsPageGtk::PasswordsPageGtk(Profile* profile) gtk_util::kContentAreaBorder); gtk_box_pack_end(GTK_BOX(page_), buttons, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(page_), scroll_window, TRUE, TRUE, 0); + + // Initialize UI state based on current preference values. + OnPrefChanged(prefs::kPasswordManagerAllowShowPasswords); } PasswordsPageGtk::~PasswordsPageGtk() { @@ -157,6 +167,36 @@ void PasswordsPageGtk::SetPasswordList( gtk_widget_set_sensitive(remove_all_button_, result.size() > 0); } +void PasswordsPageGtk::HidePassword() { + password_showing_ = false; + gtk_label_set_text(GTK_LABEL(password_), ""); + gtk_button_set_label(GTK_BUTTON(show_password_button_), + l10n_util::GetStringUTF8(IDS_PASSWORDS_PAGE_VIEW_SHOW_BUTTON).c_str()); +} + +void PasswordsPageGtk::Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + DCHECK_EQ(NotificationType::PREF_CHANGED, type.value); + const std::string* pref_name = Details<std::string>(details).ptr(); + OnPrefChanged(*pref_name); +} + +void PasswordsPageGtk::OnPrefChanged(const std::string& pref_name) { + if (pref_name == prefs::kPasswordManagerAllowShowPasswords) { + if (allow_show_passwords_.GetValue()) { + gtk_widget_show(show_password_button_); + gtk_widget_show(password_); + } else { + HidePassword(); + gtk_widget_hide(show_password_button_); + gtk_widget_hide(password_); + } + } else { + NOTREACHED(); + } +} + void PasswordsPageGtk::OnRemoveButtonClicked(GtkWidget* widget) { GtkTreeIter iter; if (!gtk_tree_selection_get_selected(password_selection_, @@ -227,15 +267,13 @@ void PasswordsPageGtk::OnRemoveAllConfirmResponse(GtkWidget* confirm, } void PasswordsPageGtk::OnShowPasswordButtonClicked(GtkWidget* widget) { - password_showing_ = !password_showing_; - if (!password_showing_) { + if (password_showing_ || !allow_show_passwords_.GetValue()) { // Hide the password. - gtk_label_set_text(GTK_LABEL(password_), ""); - gtk_button_set_label(GTK_BUTTON(show_password_button_), - l10n_util::GetStringUTF8(IDS_PASSWORDS_PAGE_VIEW_SHOW_BUTTON).c_str()); + HidePassword(); return; } // Show the password. + password_showing_ = true; GtkTreeIter iter; if (!gtk_tree_selection_get_selected(password_selection_, NULL, &iter)) { @@ -277,10 +315,7 @@ void PasswordsPageGtk::OnShowPasswordButtonRealized(GtkWidget* widget) { void PasswordsPageGtk::OnPasswordSelectionChanged(GtkTreeSelection* selection) { // No matter how the selection changed, we want to hide the old password. - gtk_label_set_text(GTK_LABEL(password_), ""); - gtk_button_set_label(GTK_BUTTON(show_password_button_), - l10n_util::GetStringUTF8(IDS_PASSWORDS_PAGE_VIEW_SHOW_BUTTON).c_str()); - password_showing_ = false; + HidePassword(); GtkTreeIter iter; if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) { diff --git a/chrome/browser/gtk/options/passwords_page_gtk.h b/chrome/browser/gtk/options/passwords_page_gtk.h index 3b7dc25..8d81689c 100644 --- a/chrome/browser/gtk/options/passwords_page_gtk.h +++ b/chrome/browser/gtk/options/passwords_page_gtk.h @@ -12,9 +12,11 @@ #include "app/gtk_signal.h" #include "chrome/browser/password_manager/password_store.h" +#include "chrome/browser/prefs/pref_member.h" #include "chrome/browser/profile.h" +#include "chrome/common/notification_observer.h" -class PasswordsPageGtk { +class PasswordsPageGtk : public NotificationObserver { public: explicit PasswordsPageGtk(Profile* profile); virtual ~PasswordsPageGtk(); @@ -32,6 +34,17 @@ class PasswordsPageGtk { // the PasswordForms in the vector. void SetPasswordList(const std::vector<webkit_glue::PasswordForm*>& result); + // Helper that hides the password. + void HidePassword(); + + // NotificationObserver implementation. + void Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details); + + // Handles changes to the observed preferences and updates the UI. + void OnPrefChanged(const std::string& pref_name); + CHROMEGTK_CALLBACK_0(PasswordsPageGtk, void, OnRemoveButtonClicked); CHROMEGTK_CALLBACK_0(PasswordsPageGtk, void, OnRemoveAllButtonClicked); CHROMEGTK_CALLBACK_1(PasswordsPageGtk, void, OnRemoveAllConfirmResponse, int); @@ -91,6 +104,7 @@ class PasswordsPageGtk { GtkWidget* page_; Profile* profile_; + BooleanPrefMember allow_show_passwords_; std::vector<webkit_glue::PasswordForm*> password_list_; DISALLOW_COPY_AND_ASSIGN(PasswordsPageGtk); |