summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authormnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-07 13:58:47 +0000
committermnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-07 13:58:47 +0000
commit526fc024687de776e518fa18c86017ab8cecfdd9 (patch)
treeb737c4af43d71ad72da522078cf6469c2c5d65d5 /chrome/browser/gtk
parentc5c6c8c9a905f7c6d4086c1f22ff7037a69c3155 (diff)
downloadchromium_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.cc53
-rw-r--r--chrome/browser/gtk/options/passwords_page_gtk.h16
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);