Index: components/password_manager/core/browser/password_form_manager.cc |
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc |
index f6b0ca39213f16fa66ce717d568fd5849eb973cf..5a691a0f895a115705ed96d12ca71877005d49d8 100644 |
--- a/components/password_manager/core/browser/password_form_manager.cc |
+++ b/components/password_manager/core/browser/password_form_manager.cc |
@@ -105,6 +105,17 @@ bool PasswordFormManager::DoesManage(const PasswordForm& form, |
return true; |
} |
+void PasswordFormManager::Update( |
+ const base::string16& username_to_remove, |
+ const PasswordStore::AuthorizationPromptPolicy prompt_policy, |
+ bool remove_candidate_from_store) { |
+ username_to_remove_ = username_to_remove; |
+ remove_candidate_from_store_ = remove_candidate_from_store; |
+ |
+ state_ = PRE_MATCHING_PHASE; |
+ FetchMatchingLoginsFromPasswordStore(prompt_policy); |
+} |
+ |
bool PasswordFormManager::IsBlacklisted() { |
DCHECK_EQ(state_, POST_MATCHING_PHASE); |
if (preferred_match_ && preferred_match_->blacklisted_by_user) |
@@ -391,8 +402,35 @@ void PasswordFormManager::OnRequestDone( |
manager_action_ = kManagerActionNone; |
else |
manager_action_ = kManagerActionAutofilled; |
- password_manager_->Autofill(observed_form_, best_matches_, |
- *preferred_match_, wait_for_username); |
+ |
+ if (username_to_remove_.size() == 0) { |
+ password_manager_->Autofill( |
+ observed_form_, best_matches_, *preferred_match_, wait_for_username); |
+ } else { |
+ PasswordStore* password_store = client_->GetPasswordStore(); |
+ if (!password_store) { |
+ username_to_remove_.clear(); |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ PasswordFormMap::iterator it = best_matches_.find(username_to_remove_); |
+ |
+ if (it != best_matches_.end()) { |
+ if (remove_candidate_from_store_) |
+ password_store->RemoveLogin(*(it->second)); |
+ |
+ best_matches_.erase(it); |
+ if (best_matches_.size() > 0) { |
+ preferred_match_ = best_matches_.begin()->second; |
+ password_manager_->Autofill(observed_form_, |
+ best_matches_, |
+ *preferred_match_, |
+ wait_for_username); |
+ } |
+ } |
+ username_to_remove_.clear(); |
+ } |
} |
void PasswordFormManager::OnGetPasswordStoreResults( |