| 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(
|
|
|