| 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_);
|
| + 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)
|
|
|