Index: chrome/browser/password_manager/password_form_manager.cc |
diff --git a/chrome/browser/password_manager/password_form_manager.cc b/chrome/browser/password_manager/password_form_manager.cc |
index 59c5a6a2e16fcf646892747a4edb4440b8930f07..d900c8eb12c470eee87dec0eddf15207dd94983e 100644 |
--- a/chrome/browser/password_manager/password_form_manager.cc |
+++ b/chrome/browser/password_manager/password_form_manager.cc |
@@ -39,7 +39,9 @@ PasswordFormManager::PasswordFormManager(Profile* profile, |
web_contents_(web_contents), |
manager_action_(kManagerActionNone), |
user_action_(kUserActionNone), |
- submit_result_(kSubmitResultNotSubmitted) { |
+ submit_result_(kSubmitResultNotSubmitted), |
+ should_save_password_(false), |
+ should_blacklist_password_(false) { |
DCHECK(profile_); |
if (observed_form_.origin.is_valid()) |
base::SplitString(observed_form_.origin.path(), '/', &form_path_tokens_); |
@@ -50,6 +52,10 @@ PasswordFormManager::~PasswordFormManager() { |
UMA_HISTOGRAM_ENUMERATION("PasswordManager.ActionsTaken", |
GetActionsTaken(), |
kMaxNumActionsTaken); |
+ // In case the tab is closed before the next navigation occurs this will |
+ // apply outstanding changes. |
+ if (should_save_password_ || should_blacklist_password_) |
+ ApplyChange(); |
} |
int PasswordFormManager::GetActionsTaken() { |
@@ -106,6 +112,26 @@ bool PasswordFormManager::DoesManage(const PasswordForm& form, |
return true; |
} |
+void PasswordFormManager::ApplyChange() { |
+ DCHECK(!should_blacklist_password_ || !should_save_password_); |
Peter Kasting
2013/09/09 18:19:02
Nit: Given that these two bools are not set to tru
npentrel
2013/09/09 22:08:34
Done.
|
+ if (should_save_password_) |
+ Save(); |
+ else if (should_blacklist_password_) |
+ PermanentlyBlacklist(); |
+ should_blacklist_password_ = false; |
+ should_save_password_ = false; |
+} |
+ |
+void PasswordFormManager::SavePassword() { |
+ should_blacklist_password_ = false; |
+ should_save_password_ = true; |
+} |
+ |
+void PasswordFormManager::BlacklistPassword() { |
+ should_save_password_ = false; |
+ should_blacklist_password_ = true; |
+} |
+ |
bool PasswordFormManager::IsBlacklisted() { |
DCHECK_EQ(state_, POST_MATCHING_PHASE); |
if (preferred_match_ && preferred_match_->blacklisted_by_user) |