| Index: chrome/browser/ui/webui/options/password_manager_handler.cc | 
| diff --git a/chrome/browser/ui/webui/options/password_manager_handler.cc b/chrome/browser/ui/webui/options/password_manager_handler.cc | 
| index fe8443304f70371d99b422a227cfed15b7fa3099..d4abf491c5a2bfa153b3626da27b8aba19416bca 100644 | 
| --- a/chrome/browser/ui/webui/options/password_manager_handler.cc | 
| +++ b/chrome/browser/ui/webui/options/password_manager_handler.cc | 
| @@ -13,6 +13,8 @@ | 
| #include "chrome/browser/profiles/profile.h" | 
| #include "chrome/common/pref_names.h" | 
| #include "chrome/common/url_constants.h" | 
| +#include "content/common/notification_details.h" | 
| +#include "content/common/notification_source.h" | 
| #include "grit/chromium_strings.h" | 
| #include "grit/generated_resources.h" | 
| #include "net/base/net_util.h" | 
| @@ -69,6 +71,8 @@ void PasswordManagerHandler::GetLocalizedValues( | 
| } | 
|  | 
| void PasswordManagerHandler::Initialize() { | 
| +  show_passwords_.Init(prefs::kPasswordManagerAllowShowPasswords, | 
| +                       web_ui_->GetProfile()->GetPrefs(), this); | 
| // We should not cache web_ui_->GetProfile(). See crosbug.com/6304. | 
| GetPasswordStore()->AddObserver(this); | 
| } | 
| @@ -96,6 +100,19 @@ PasswordStore* PasswordManagerHandler::GetPasswordStore() { | 
| return web_ui_->GetProfile()->GetPasswordStore(Profile::EXPLICIT_ACCESS); | 
| } | 
|  | 
| +void PasswordManagerHandler::Observe(NotificationType type, | 
| +                                     const NotificationSource& source, | 
| +                                     const NotificationDetails& details) { | 
| +  if (type.value == NotificationType::PREF_CHANGED) { | 
| +    std::string* pref_name = Details<std::string>(details).ptr(); | 
| +    if (*pref_name == prefs::kPasswordManagerAllowShowPasswords) { | 
| +      UpdatePasswordLists(NULL); | 
| +    } | 
| +  } | 
| + | 
| +  OptionsPageUIHandler::Observe(type, source, details); | 
| +} | 
| + | 
| void PasswordManagerHandler::UpdatePasswordLists(const ListValue* args) { | 
| // Reset the current lists. | 
| password_list_.reset(); | 
| @@ -141,12 +158,15 @@ void PasswordManagerHandler::RemoveAllPasswordExceptions( | 
|  | 
| void PasswordManagerHandler::SetPasswordList() { | 
| ListValue entries; | 
| +  bool show_passwords = *show_passwords_; | 
| +  string16 empty; | 
| for (size_t i = 0; i < password_list_.size(); ++i) { | 
| ListValue* entry = new ListValue(); | 
| entry->Append(new StringValue(net::FormatUrl(password_list_[i]->origin, | 
| languages_))); | 
| entry->Append(new StringValue(password_list_[i]->username_value)); | 
| -    entry->Append(new StringValue(password_list_[i]->password_value)); | 
| +    entry->Append(new StringValue( | 
| +        show_passwords ? password_list_[i]->password_value : empty)); | 
| entries.Append(entry); | 
| } | 
|  | 
|  |