Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(629)

Unified Diff: components/password_manager/core/browser/password_manager.cc

Issue 2157333002: Make PasswordManager::pending_login_managers_ a vector of unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@555132_no_old_login_managers
Patch Set: Undo unrelated change Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/password_manager/core/browser/password_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « components/password_manager/core/browser/password_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698