Chromium Code Reviews| Index: components/password_manager/core/browser/password_manager.cc |
| diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc |
| index b8ffb02d5a9e793775c52b6ca0bee834c2d898dd..ce5041839346aba2433af4938a386e007c989095 100644 |
| --- a/components/password_manager/core/browser/password_manager.cc |
| +++ b/components/password_manager/core/browser/password_manager.cc |
| @@ -229,11 +229,11 @@ void PasswordManager::SetGenerationElementAndReasonForForm( |
| // If there is no corresponding PasswordFormManager, we create one. This is |
| // not the common case, and should only happen when there is a bug in our |
| // ability to detect forms. |
| - PasswordFormManager* manager = new PasswordFormManager( |
| + auto manager = base::WrapUnique(new PasswordFormManager( |
| this, client_, driver->AsWeakPtr(), form, |
| - base::WrapUnique(new FormSaverImpl(client_->GetPasswordStore()))); |
| - pending_login_managers_.push_back(manager); |
| + base::WrapUnique(new FormSaverImpl(client_->GetPasswordStore())))); |
| manager->FetchDataFromPasswordStore(); |
| + pending_login_managers_.push_back(std::move(manager)); |
| } |
| void PasswordManager::SaveGenerationFieldDetectedByClassifier( |
| @@ -270,16 +270,13 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
| return; |
| } |
| - std::unique_ptr<PasswordFormManager> manager; |
| - ScopedVector<PasswordFormManager>::iterator matched_manager_it = |
| - pending_login_managers_.end(); |
| + auto matched_manager_it = pending_login_managers_.end(); |
| PasswordFormManager::MatchResultMask current_match_result = |
| PasswordFormManager::RESULT_NO_MATCH; |
| // Below, "matching" is in DoesManage-sense and "not ready" in |
| // !HasCompletedMatching sense. We keep track of such PasswordFormManager |
| // instances for UMA. |
| - for (ScopedVector<PasswordFormManager>::iterator iter = |
| - pending_login_managers_.begin(); |
| + for (auto iter = pending_login_managers_.begin(); |
| iter != pending_login_managers_.end(); ++iter) { |
| PasswordFormManager::MatchResultMask result = (*iter)->DoesManage(form); |
| @@ -330,16 +327,17 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
| // If we didn't find a manager, this means a form was submitted without |
| // first loading the page containing the form. Don't offer to save |
| // passwords in this case. |
| - if (matched_manager_it != pending_login_managers_.end()) { |
| - // Transfer ownership of the manager from |pending_login_managers_| to |
| - // |manager|. |
| - manager.reset(*matched_manager_it); |
| - pending_login_managers_.weak_erase(matched_manager_it); |
| - } else { |
| + if (matched_manager_it == pending_login_managers_.end()) { |
| RecordFailure(NO_MATCHING_FORM, form.origin, logger.get()); |
| return; |
| } |
| + std::unique_ptr<PasswordFormManager> manager; |
| + // Transfer ownership of the manager from |pending_login_managers_| to |
| + // |manager|. |
| + manager.swap(*matched_manager_it); |
| + pending_login_managers_.erase(matched_manager_it); |
| + |
| PasswordForm provisionally_saved_form(form); |
| provisionally_saved_form.preferred = true; |
| if (logger) { |
| @@ -365,7 +363,7 @@ void PasswordManager::ProvisionallySavePassword(const PasswordForm& form) { |
| } |
| void PasswordManager::UpdateFormManagers() { |
| - for (PasswordFormManager* form_manager : pending_login_managers_) { |
| + for (const auto& form_manager : pending_login_managers_) { |
| form_manager->FetchDataFromPasswordStore(); |
| } |
| } |
| @@ -495,7 +493,7 @@ void PasswordManager::CreatePendingLoginManagers( |
| base::CompareCase::SENSITIVE)) |
| continue; |
| bool old_manager_found = false; |
| - for (const auto& old_manager : pending_login_managers_.get()) { |
| + for (const auto& old_manager : pending_login_managers_) { |
| if (old_manager->DoesManage(*iter) != |
| PasswordFormManager::RESULT_COMPLETE_MATCH) { |
| continue; |
| @@ -522,14 +520,13 @@ void PasswordManager::CreatePendingLoginManagers( |
| if (logger) |
| logger->LogFormSignatures(Logger::STRING_ADDING_SIGNATURE, *iter); |
| - PasswordFormManager* manager = new PasswordFormManager( |
| + auto manager = base::WrapUnique(new PasswordFormManager( |
| this, client_, |
| (driver ? driver->AsWeakPtr() : base::WeakPtr<PasswordManagerDriver>()), |
| *iter, |
| - base::WrapUnique(new FormSaverImpl(client_->GetPasswordStore()))); |
| - pending_login_managers_.push_back(manager); |
| - |
| + base::WrapUnique(new FormSaverImpl(client_->GetPasswordStore())))); |
| manager->FetchDataFromPasswordStore(); |
| + pending_login_managers_.push_back(std::move(manager)); |
| } |
| if (logger) { |
| @@ -847,13 +844,13 @@ void PasswordManager::ProcessAutofillPredictions( |
| PasswordFormManager* PasswordManager::GetMatchingPendingManager( |
| const PasswordForm& form) { |
| - auto matched_manager_it = pending_login_managers_.end(); |
| + PasswordFormManager* matched_manager = nullptr; |
|
vabr (Chromium)
2016/07/19 13:06:10
In particular here I actually replaced auto with t
|
| PasswordFormManager::MatchResultMask current_match_result = |
| PasswordFormManager::RESULT_NO_MATCH; |
| - for (auto iter = pending_login_managers_.begin(); |
| - iter != pending_login_managers_.end(); ++iter) { |
| - PasswordFormManager::MatchResultMask result = (*iter)->DoesManage(form); |
| + for (auto& login_manager : pending_login_managers_) { |
| + PasswordFormManager::MatchResultMask result = |
| + login_manager->DoesManage(form); |
| if (result == PasswordFormManager::RESULT_NO_MATCH) |
| continue; |
| @@ -861,7 +858,7 @@ PasswordFormManager* PasswordManager::GetMatchingPendingManager( |
| if (result == PasswordFormManager::RESULT_COMPLETE_MATCH) { |
| // If we find a manager that exactly matches the submitted form including |
| // the action URL, exit the loop. |
| - matched_manager_it = iter; |
| + matched_manager = login_manager.get(); |
| break; |
| } else if (result == (PasswordFormManager::RESULT_COMPLETE_MATCH & |
| ~PasswordFormManager::RESULT_ACTION_MATCH) && |
| @@ -870,16 +867,14 @@ PasswordFormManager* PasswordManager::GetMatchingPendingManager( |
| // URL, remember it as a candidate and continue searching for an exact |
| // match. See http://crbug.com/27246 for an example where actions can |
| // change. |
| - matched_manager_it = iter; |
| + matched_manager = login_manager.get(); |
| current_match_result = result; |
| } else if (result > current_match_result) { |
| - matched_manager_it = iter; |
| + matched_manager = login_manager.get(); |
| current_match_result = result; |
| } |
| } |
| - if (matched_manager_it != pending_login_managers_.end()) |
| - return *matched_manager_it; |
| - return nullptr; |
| + return matched_manager; |
| } |
| } // namespace password_manager |