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

Unified Diff: chrome/browser/password_manager/password_store_mac.cc

Issue 2566873002: Remove ScopedVector from PasswordStoreMac (Closed)
Patch Set: back_inserter Created 4 years 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
Index: chrome/browser/password_manager/password_store_mac.cc
diff --git a/chrome/browser/password_manager/password_store_mac.cc b/chrome/browser/password_manager/password_store_mac.cc
index 5d377405d5b9d44898642506515563fbf0ad0385..bd6e2048991de66e8336a8faea99f75a62bba299 100644
--- a/chrome/browser/password_manager/password_store_mac.cc
+++ b/chrome/browser/password_manager/password_store_mac.cc
@@ -7,6 +7,7 @@
#include <CoreServices/CoreServices.h>
#include <stddef.h>
#include <algorithm>
+#include <iterator>
#include <set>
#include <string>
#include <utility>
@@ -187,29 +188,29 @@ void KeychainSearch::FindMatchingItems(std::vector<SecKeychainItemRef>* items) {
}
PasswordStoreChangeList FormsToRemoveChangeList(
- const std::vector<PasswordForm*>& forms) {
+ const std::vector<std::unique_ptr<PasswordForm>>& forms) {
PasswordStoreChangeList changes;
- for (std::vector<PasswordForm*>::const_iterator i = forms.begin();
- i != forms.end(); ++i) {
- changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, **i));
+ for (const auto& form : forms) {
+ changes.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, *form));
}
return changes;
}
// Moves the content of |second| to the end of |first|.
-void AppendSecondToFirst(ScopedVector<autofill::PasswordForm>* first,
- ScopedVector<autofill::PasswordForm>* second) {
- first->insert(first->end(), second->begin(), second->end());
- second->weak_clear();
+void AppendSecondToFirst(std::vector<std::unique_ptr<PasswordForm>>* first,
+ std::vector<std::unique_ptr<PasswordForm>>* second) {
+ first->reserve(first->size() + second->size());
+ std::move(second->begin(), second->end(), std::back_inserter(*first));
+ second->clear();
}
// Returns the best match for |base_form| from |keychain_forms|, or nullptr if
// there is no suitable match.
const PasswordForm* BestKeychainFormForForm(
const PasswordForm& base_form,
- const std::vector<PasswordForm*>& keychain_forms) {
+ const std::vector<std::unique_ptr<PasswordForm>>& keychain_forms) {
const PasswordForm* partial_match = nullptr;
- for (const auto* keychain_form : keychain_forms) {
+ for (const auto& keychain_form : keychain_forms) {
// TODO(stuartmorgan): We should really be scoring path matches and picking
// the best, rather than just checking exact-or-not (although in practice
// keychain items with paths probably came from us).
@@ -217,49 +218,19 @@ const PasswordForm* BestKeychainFormForForm(
base_form, *keychain_form,
internal_keychain_helpers::FUZZY_FORM_MATCH)) {
if (base_form.origin == keychain_form->origin) {
- return keychain_form;
+ return keychain_form.get();
} else if (!partial_match) {
- partial_match = keychain_form;
+ partial_match = keychain_form.get();
}
}
}
return partial_match;
}
-// Iterates over all elements in |forms|, passes the pointed to objects to
-// |mover|, and clears |forms| efficiently. FormMover needs to be a callable
-// entity, accepting std::unique_ptr<autofill::PasswordForm> as its sole
-// argument.
-template <typename FormMover>
-inline void MoveAllFormsOut(ScopedVector<autofill::PasswordForm>* forms,
- FormMover mover) {
- for (autofill::PasswordForm* form_ptr : *forms) {
- mover(std::unique_ptr<autofill::PasswordForm>(form_ptr));
- }
- // We moved the ownership of every form out of |forms|. For performance
- // reasons, we can just weak_clear it, instead of nullptr-ing the respective
- // elements and letting the vector's destructor to go through the list once
- // more. This was tested on a benchmark, and seemed to make a difference on
- // Mac.
- forms->weak_clear();
-}
-
// True if the form has no password to be stored in Keychain.
-bool IsLoginDatabaseOnlyForm(const autofill::PasswordForm& form) {
+bool IsLoginDatabaseOnlyForm(const PasswordForm& form) {
return form.blacklisted_by_user || !form.federation_origin.unique() ||
- form.scheme == autofill::PasswordForm::SCHEME_USERNAME_ONLY;
-}
-
-// TODO(crbug.com/555132): Temporary utility to convert from std::vector to
-// ScopedVector.
-ScopedVector<PasswordForm> ConvertToScopedVector(
- std::vector<std::unique_ptr<PasswordForm>> forms) {
- ScopedVector<PasswordForm> result;
- result.resize(forms.size());
- std::transform(
- forms.begin(), forms.end(), result.begin(),
- [](std::unique_ptr<PasswordForm>& form) { return form.release(); });
- return result;
+ form.scheme == PasswordForm::SCHEME_USERNAME_ONLY;
}
} // namespace
@@ -503,17 +474,20 @@ bool FormsMatchForMerge(const PasswordForm& form_a,
// Moves entries from |forms| that represent either blacklisted or federated
// logins into |extracted|. These two types are stored only in the LoginDatabase
// and do not have corresponding Keychain entries.
-void ExtractNonKeychainForms(ScopedVector<autofill::PasswordForm>* forms,
- ScopedVector<autofill::PasswordForm>* extracted) {
+void ExtractNonKeychainForms(
+ std::vector<std::unique_ptr<PasswordForm>>* forms,
+ std::vector<std::unique_ptr<PasswordForm>>* extracted) {
extracted->reserve(extracted->size() + forms->size());
- ScopedVector<autofill::PasswordForm> remaining;
- MoveAllFormsOut(forms, [&remaining, extracted](
- std::unique_ptr<autofill::PasswordForm> form) {
+
+ std::vector<std::unique_ptr<PasswordForm>> remaining;
+ remaining.reserve(forms->size());
+
+ for (std::unique_ptr<PasswordForm>& form : *forms) {
if (IsLoginDatabaseOnlyForm(*form))
extracted->push_back(std::move(form));
else
remaining.push_back(std::move(form));
- });
+ }
forms->swap(remaining);
}
@@ -526,44 +500,41 @@ void ExtractNonKeychainForms(ScopedVector<autofill::PasswordForm>* forms,
// The database forms of type (2) have their password value updated from the
// corresponding keychain form, and all the keychain forms corresponding to some
// database form are removed from |keychain_forms| and deleted.
-void MergePasswordForms(ScopedVector<autofill::PasswordForm>* keychain_forms,
- ScopedVector<autofill::PasswordForm>* database_forms,
- ScopedVector<autofill::PasswordForm>* merged_forms) {
+void MergePasswordForms(
+ std::vector<std::unique_ptr<PasswordForm>>* keychain_forms,
+ std::vector<std::unique_ptr<PasswordForm>>* database_forms,
+ std::vector<std::unique_ptr<PasswordForm>>* merged_forms) {
// Pull out the database blacklist items and federated logins, since they are
// used as-is rather than being merged with keychain forms.
ExtractNonKeychainForms(database_forms, merged_forms);
// Merge the normal entries.
- ScopedVector<autofill::PasswordForm> unused_database_forms;
+ std::vector<std::unique_ptr<PasswordForm>> unused_database_forms;
unused_database_forms.reserve(database_forms->size());
- std::set<const autofill::PasswordForm*> used_keychain_forms;
+ std::set<const PasswordForm*> used_keychain_forms;
// Move all database forms to either |merged_forms| or
// |unused_database_forms|, based on whether they have a match in the keychain
// forms or not. If there is a match, add its password to the DB form and
// mark the keychain form as used.
- MoveAllFormsOut(
- database_forms,
- [keychain_forms, &used_keychain_forms, merged_forms,
- &unused_database_forms](std::unique_ptr<autofill::PasswordForm> form) {
- const PasswordForm* best_match =
- BestKeychainFormForForm(*form, keychain_forms->get());
- if (best_match) {
- used_keychain_forms.insert(best_match);
- form->password_value = best_match->password_value;
- merged_forms->push_back(std::move(form));
- } else {
- unused_database_forms.push_back(std::move(form));
- }
- });
+ for (std::unique_ptr<PasswordForm>& db_form : *database_forms) {
+ const PasswordForm* best_match =
+ BestKeychainFormForForm(*db_form, *keychain_forms);
+ if (best_match) {
+ used_keychain_forms.insert(best_match);
+ db_form->password_value = best_match->password_value;
+ merged_forms->push_back(std::move(db_form));
+ } else {
+ unused_database_forms.push_back(std::move(db_form));
+ }
+ }
database_forms->swap(unused_database_forms);
// Clear out all the Keychain entries we used.
- ScopedVector<autofill::PasswordForm> unused_keychain_forms;
+ std::vector<std::unique_ptr<PasswordForm>> unused_keychain_forms;
unused_keychain_forms.reserve(keychain_forms->size());
- for (auto*& keychain_form : *keychain_forms) {
- if (!base::ContainsKey(used_keychain_forms, keychain_form)) {
- unused_keychain_forms.push_back(keychain_form);
- keychain_form = nullptr;
+ for (std::unique_ptr<PasswordForm>& keychain_form : *keychain_forms) {
+ if (!base::ContainsKey(used_keychain_forms, keychain_form.get())) {
+ unused_keychain_forms.push_back(std::move(keychain_form));
}
}
keychain_forms->swap(unused_keychain_forms);
@@ -588,9 +559,10 @@ std::vector<ItemFormPair> ExtractAllKeychainItemAttributesIntoPasswordForms(
return item_form_pairs;
}
-void GetPasswordsForForms(const AppleKeychain& keychain,
- ScopedVector<autofill::PasswordForm>* database_forms,
- ScopedVector<autofill::PasswordForm>* passwords) {
+void GetPasswordsForForms(
+ const AppleKeychain& keychain,
+ std::vector<std::unique_ptr<PasswordForm>>* database_forms,
+ std::vector<std::unique_ptr<PasswordForm>>* passwords) {
// First load the attributes of all items in the keychain without loading
// their password data, and then match items in |database_forms| against them.
// This avoids individually searching through the keychain for passwords
@@ -606,22 +578,19 @@ void GetPasswordsForForms(const AppleKeychain& keychain,
// Next, compare the attributes of the PasswordForms in |database_forms|
// against those in |item_form_pairs|, and extract password data for each
// matching PasswordForm using its corresponding SecKeychainItemRef.
- ScopedVector<autofill::PasswordForm> unused_db_forms;
+ std::vector<std::unique_ptr<PasswordForm>> unused_db_forms;
unused_db_forms.reserve(database_forms->size());
// Move database forms with a password stored in |keychain| to |passwords|,
// including the password. The rest is moved to |unused_db_forms|.
- MoveAllFormsOut(
- database_forms,
- [&keychain, &item_form_pairs, passwords,
- &unused_db_forms](std::unique_ptr<autofill::PasswordForm> form) {
- ScopedVector<autofill::PasswordForm> keychain_matches =
- ExtractPasswordsMergeableWithForm(keychain, item_form_pairs, *form);
-
- ScopedVector<autofill::PasswordForm> db_form_container;
- db_form_container.push_back(std::move(form));
- MergePasswordForms(&keychain_matches, &db_form_container, passwords);
- AppendSecondToFirst(&unused_db_forms, &db_form_container);
- });
+ for (std::unique_ptr<PasswordForm>& db_form : *database_forms) {
+ std::vector<std::unique_ptr<PasswordForm>> keychain_matches =
+ ExtractPasswordsMergeableWithForm(keychain, item_form_pairs, *db_form);
+
+ std::vector<std::unique_ptr<PasswordForm>> db_form_container;
+ db_form_container.push_back(std::move(db_form));
+ MergePasswordForms(&keychain_matches, &db_form_container, passwords);
+ AppendSecondToFirst(&unused_db_forms, &db_form_container);
+ }
database_forms->swap(unused_db_forms);
for (SecKeychainItemRef item : keychain_items) {
@@ -684,17 +653,17 @@ bool FormIsValidAndMatchesOtherForm(const PasswordForm& query_form,
return FormsMatchForMerge(query_form, other_form, STRICT_FORM_MATCH);
}
-ScopedVector<autofill::PasswordForm> ExtractPasswordsMergeableWithForm(
+std::vector<std::unique_ptr<PasswordForm>> ExtractPasswordsMergeableWithForm(
const AppleKeychain& keychain,
const std::vector<ItemFormPair>& item_form_pairs,
const PasswordForm& query_form) {
- ScopedVector<autofill::PasswordForm> matches;
+ std::vector<std::unique_ptr<PasswordForm>> matches;
for (std::vector<ItemFormPair>::const_iterator i = item_form_pairs.begin();
i != item_form_pairs.end(); ++i) {
if (FormIsValidAndMatchesOtherForm(query_form, *(i->second))) {
// Create a new object, since the caller is responsible for deleting the
// returned forms.
- std::unique_ptr<PasswordForm> form_with_password(new PasswordForm());
+ auto form_with_password = base::MakeUnique<PasswordForm>();
FillPasswordFormFromKeychainItem(
keychain, i->first, form_with_password.get(),
true); // Load password attributes and data.
@@ -715,7 +684,7 @@ MacKeychainPasswordFormAdapter::MacKeychainPasswordFormAdapter(
: keychain_(keychain), finds_only_owned_(false) {
}
-ScopedVector<autofill::PasswordForm>
+std::vector<std::unique_ptr<PasswordForm>>
MacKeychainPasswordFormAdapter::PasswordsFillingForm(
const std::string& signon_realm,
PasswordForm::Scheme scheme) {
@@ -773,7 +742,7 @@ std::vector<SecKeychainItemRef>
return matches;
}
-ScopedVector<autofill::PasswordForm>
+std::vector<std::unique_ptr<PasswordForm>>
MacKeychainPasswordFormAdapter::GetAllPasswordFormPasswords() {
std::vector<SecKeychainItemRef> items = GetAllPasswordFormKeychainItems();
return ConvertKeychainItemsToForms(&items);
@@ -840,12 +809,12 @@ void MacKeychainPasswordFormAdapter::SetFindsOnlyOwnedItems(
finds_only_owned_ = finds_only_owned;
}
-ScopedVector<autofill::PasswordForm>
+std::vector<std::unique_ptr<PasswordForm>>
MacKeychainPasswordFormAdapter::ConvertKeychainItemsToForms(
std::vector<SecKeychainItemRef>* items) {
- ScopedVector<autofill::PasswordForm> forms;
+ std::vector<std::unique_ptr<PasswordForm>> forms;
for (SecKeychainItemRef item : *items) {
- std::unique_ptr<PasswordForm> form(new PasswordForm());
+ auto form = base::MakeUnique<PasswordForm>();
if (internal_keychain_helpers::FillPasswordFormFromKeychainItem(
*keychain_, item, form.get(), true)) {
forms.push_back(std::move(form));
@@ -884,10 +853,11 @@ SecKeychainItemRef MacKeychainPasswordFormAdapter::KeychainItemForForm(
}
std::vector<SecKeychainItemRef>
- MacKeychainPasswordFormAdapter::MatchingKeychainItems(
- const std::string& signon_realm,
- autofill::PasswordForm::Scheme scheme,
- const char* path, const char* username) {
+MacKeychainPasswordFormAdapter::MatchingKeychainItems(
+ const std::string& signon_realm,
+ PasswordForm::Scheme scheme,
+ const char* path,
+ const char* username) {
std::vector<SecKeychainItemRef> matches;
std::string server;
@@ -984,13 +954,11 @@ void PasswordStoreMac::InitWithTaskRunner(
PasswordStoreMac::MigrationResult PasswordStoreMac::ImportFromKeychain(
password_manager::LoginDatabase* login_db,
crypto::AppleKeychain* keychain) {
- std::vector<std::unique_ptr<PasswordForm>> database_forms_new_format;
- if (!login_db->GetAutofillableLogins(&database_forms_new_format))
+ std::vector<std::unique_ptr<PasswordForm>> database_forms;
+ if (!login_db->GetAutofillableLogins(&database_forms))
return LOGIN_DB_FAILURE;
- ScopedVector<PasswordForm> database_forms =
- ConvertToScopedVector(std::move(database_forms_new_format));
- ScopedVector<PasswordForm> uninteresting_forms;
+ std::vector<std::unique_ptr<PasswordForm>> uninteresting_forms;
internal_keychain_helpers::ExtractNonKeychainForms(&database_forms,
&uninteresting_forms);
// If there are no passwords to lookup in the Keychain then we're done.
@@ -1020,13 +988,13 @@ PasswordStoreMac::MigrationResult PasswordStoreMac::ImportFromKeychain(
// matching PasswordForm using its corresponding SecKeychainItemRef.
size_t unmerged_forms_count = 0;
login_db->set_clear_password_values(false);
- for (PasswordForm* form : database_forms) {
- ScopedVector<autofill::PasswordForm> keychain_matches =
+ for (const auto& form : database_forms) {
+ std::vector<std::unique_ptr<PasswordForm>> keychain_matches =
internal_keychain_helpers::ExtractPasswordsMergeableWithForm(
*keychain, item_form_pairs, *form);
const PasswordForm* best_match =
- BestKeychainFormForForm(*form, keychain_matches.get());
+ BestKeychainFormForForm(*form, keychain_matches);
if (best_match) {
form->password_value = best_match->password_value;
PasswordStoreChangeList change = login_db->UpdateLogin(*form);
@@ -1054,7 +1022,7 @@ PasswordStoreMac::MigrationResult PasswordStoreMac::ImportFromKeychain(
// static
void PasswordStoreMac::CleanUpKeychain(
crypto::AppleKeychain* keychain,
- const std::vector<std::unique_ptr<autofill::PasswordForm>>& forms) {
+ const std::vector<std::unique_ptr<PasswordForm>>& forms) {
MacKeychainPasswordFormAdapter keychain_adapter(keychain);
keychain_adapter.SetFindsOnlyOwnedItems(true);
for (const auto& form : forms)
@@ -1147,23 +1115,20 @@ PasswordStoreChangeList PasswordStoreMac::RemoveLoginsByURLAndTimeImpl(
base::Time delete_begin,
base::Time delete_end) {
PasswordStoreChangeList changes;
- ScopedVector<PasswordForm> forms_to_consider;
- ScopedVector<PasswordForm> forms_to_remove;
+ std::vector<std::unique_ptr<PasswordForm>> forms_to_consider;
+ std::vector<std::unique_ptr<PasswordForm>> forms_to_remove;
if (login_metadata_db_ &&
login_metadata_db_->GetLoginsCreatedBetween(delete_begin, delete_end,
&forms_to_consider)) {
- MoveAllFormsOut(
- &forms_to_consider,
- [this, &url_filter, &forms_to_remove](
- std::unique_ptr<autofill::PasswordForm> form_to_consider) {
- if (url_filter.Run(form_to_consider->origin) &&
- login_metadata_db_->RemoveLogin(*form_to_consider))
- forms_to_remove.push_back(std::move(form_to_consider));
- });
+ for (std::unique_ptr<PasswordForm>& form_to_consider : forms_to_consider) {
+ if (url_filter.Run(form_to_consider->origin) &&
+ login_metadata_db_->RemoveLogin(*form_to_consider))
+ forms_to_remove.push_back(std::move(form_to_consider));
+ }
if (!forms_to_remove.empty()) {
- RemoveKeychainForms(forms_to_remove.get());
+ RemoveKeychainForms(forms_to_remove);
CleanOrphanedForms(&forms_to_remove); // Add the orphaned forms.
- changes = FormsToRemoveChangeList(forms_to_remove.get());
+ changes = FormsToRemoveChangeList(forms_to_remove);
LogStatsForBulkDeletion(changes.size());
}
}
@@ -1174,15 +1139,15 @@ PasswordStoreChangeList PasswordStoreMac::RemoveLoginsCreatedBetweenImpl(
base::Time delete_begin,
base::Time delete_end) {
PasswordStoreChangeList changes;
- ScopedVector<PasswordForm> forms_to_remove;
+ std::vector<std::unique_ptr<PasswordForm>> forms_to_remove;
if (login_metadata_db_ &&
login_metadata_db_->GetLoginsCreatedBetween(delete_begin, delete_end,
&forms_to_remove) &&
login_metadata_db_->RemoveLoginsCreatedBetween(delete_begin,
delete_end)) {
- RemoveKeychainForms(forms_to_remove.get());
+ RemoveKeychainForms(forms_to_remove);
CleanOrphanedForms(&forms_to_remove); // Add the orphaned forms.
- changes = FormsToRemoveChangeList(forms_to_remove.get());
+ changes = FormsToRemoveChangeList(forms_to_remove);
LogStatsForBulkDeletion(changes.size());
}
return changes;
@@ -1192,14 +1157,14 @@ PasswordStoreChangeList PasswordStoreMac::RemoveLoginsSyncedBetweenImpl(
base::Time delete_begin,
base::Time delete_end) {
PasswordStoreChangeList changes;
- ScopedVector<PasswordForm> forms_to_remove;
+ std::vector<std::unique_ptr<PasswordForm>> forms_to_remove;
if (login_metadata_db_ &&
login_metadata_db_->GetLoginsSyncedBetween(delete_begin, delete_end,
&forms_to_remove) &&
login_metadata_db_->RemoveLoginsSyncedBetween(delete_begin, delete_end)) {
- RemoveKeychainForms(forms_to_remove.get());
+ RemoveKeychainForms(forms_to_remove);
CleanOrphanedForms(&forms_to_remove); // Add the orphaned forms_to_remove.
- changes = FormsToRemoveChangeList(forms_to_remove.get());
+ changes = FormsToRemoveChangeList(forms_to_remove);
LogStatsForBulkDeletionDuringRollback(changes.size());
}
return changes;
@@ -1207,7 +1172,7 @@ PasswordStoreChangeList PasswordStoreMac::RemoveLoginsSyncedBetweenImpl(
PasswordStoreChangeList PasswordStoreMac::DisableAutoSignInForOriginsImpl(
const base::Callback<bool(const GURL&)>& origin_filter) {
- ScopedVector<autofill::PasswordForm> forms;
+ std::vector<std::unique_ptr<PasswordForm>> forms;
PasswordStoreChangeList changes;
if (!login_metadata_db_ ||
!login_metadata_db_->GetAutoSignInLogins(&forms)) {
@@ -1215,7 +1180,7 @@ PasswordStoreChangeList PasswordStoreMac::DisableAutoSignInForOriginsImpl(
}
std::set<GURL> origins_to_update;
- for (const auto* form : forms) {
+ for (const auto& form : forms) {
if (origin_filter.Run(form->origin))
origins_to_update.insert(form->origin);
}
@@ -1226,7 +1191,7 @@ PasswordStoreChangeList PasswordStoreMac::DisableAutoSignInForOriginsImpl(
origins_updated.insert(origin);
}
- for (const auto* form : forms) {
+ for (const auto& form : forms) {
if (origins_updated.count(form->origin)) {
changes.push_back(
PasswordStoreChange(PasswordStoreChange::UPDATE, *form));
@@ -1250,21 +1215,16 @@ std::vector<std::unique_ptr<PasswordForm>> PasswordStoreMac::FillMatchingLogins(
chrome::ScopedSecKeychainSetUserInteractionAllowed user_interaction_allowed(
false);
- // TODO(crbug.com/555132): "new_format" means std::vector instead of
- // ScopedVector. Remove |database_forms_new_format| in favour of
- // |database_forms| as soon as the latter is migrated to std::vector.
- std::vector<std::unique_ptr<PasswordForm>> database_forms_new_format;
+ std::vector<std::unique_ptr<PasswordForm>> database_forms;
if (!login_metadata_db_ ||
- !login_metadata_db_->GetLogins(form, &database_forms_new_format)) {
+ !login_metadata_db_->GetLogins(form, &database_forms)) {
return std::vector<std::unique_ptr<PasswordForm>>();
}
- ScopedVector<PasswordForm> database_forms =
- ConvertToScopedVector(std::move(database_forms_new_format));
// Let's gather all signon realms we want to match with keychain entries.
std::set<std::string> realm_set;
realm_set.insert(form.signon_realm);
- for (const autofill::PasswordForm* db_form : database_forms) {
+ for (const std::unique_ptr<PasswordForm>& db_form : database_forms) {
// TODO(vabr): We should not be getting different schemes here.
// http://crbug.com/340112
if (form.scheme != db_form->scheme)
@@ -1272,32 +1232,32 @@ std::vector<std::unique_ptr<PasswordForm>> PasswordStoreMac::FillMatchingLogins(
if (db_form->is_public_suffix_match || db_form->is_affiliation_based_match)
realm_set.insert(db_form->signon_realm);
}
- ScopedVector<autofill::PasswordForm> keychain_forms;
+ std::vector<std::unique_ptr<PasswordForm>> keychain_forms;
for (std::set<std::string>::const_iterator realm = realm_set.begin();
realm != realm_set.end(); ++realm) {
MacKeychainPasswordFormAdapter keychain_adapter(keychain_.get());
- ScopedVector<autofill::PasswordForm> temp_keychain_forms =
+ std::vector<std::unique_ptr<PasswordForm>> temp_keychain_forms =
keychain_adapter.PasswordsFillingForm(*realm, form.scheme);
AppendSecondToFirst(&keychain_forms, &temp_keychain_forms);
}
- ScopedVector<autofill::PasswordForm> matched_forms;
+ std::vector<std::unique_ptr<PasswordForm>> matched_forms;
internal_keychain_helpers::MergePasswordForms(
&keychain_forms, &database_forms, &matched_forms);
// Strip any blacklist entries out of the unused Keychain array, then take
// all the entries that are left (which we can use as imported passwords).
- ScopedVector<PasswordForm> keychain_blacklist_forms;
+ std::vector<std::unique_ptr<PasswordForm>> keychain_blacklist_forms;
internal_keychain_helpers::ExtractNonKeychainForms(&keychain_forms,
&keychain_blacklist_forms);
AppendSecondToFirst(&matched_forms, &keychain_forms);
if (!database_forms.empty()) {
RemoveDatabaseForms(&database_forms);
- NotifyLoginsChanged(FormsToRemoveChangeList(database_forms.get()));
+ NotifyLoginsChanged(FormsToRemoveChangeList(database_forms));
}
- return password_manager_util::ConvertScopedVector(std::move(matched_forms));
+ return matched_forms;
}
bool PasswordStoreMac::FillAutofillableLogins(
@@ -1305,22 +1265,17 @@ bool PasswordStoreMac::FillAutofillableLogins(
DCHECK(GetBackgroundTaskRunner()->BelongsToCurrentThread());
forms->clear();
- std::vector<std::unique_ptr<PasswordForm>> database_forms_new_format;
+ std::vector<std::unique_ptr<PasswordForm>> database_forms;
if (!login_metadata_db_ ||
- !login_metadata_db_->GetAutofillableLogins(&database_forms_new_format))
+ !login_metadata_db_->GetAutofillableLogins(&database_forms))
return false;
- ScopedVector<PasswordForm> database_forms =
- ConvertToScopedVector(std::move(database_forms_new_format));
- ScopedVector<PasswordForm> forms_scopedvector;
internal_keychain_helpers::GetPasswordsForForms(*keychain_, &database_forms,
- &forms_scopedvector);
- *forms =
- password_manager_util::ConvertScopedVector(std::move(forms_scopedvector));
+ forms);
if (!database_forms.empty()) {
RemoveDatabaseForms(&database_forms);
- NotifyLoginsChanged(FormsToRemoveChangeList(database_forms.get()));
+ NotifyLoginsChanged(FormsToRemoveChangeList(database_forms));
}
return true;
@@ -1361,7 +1316,7 @@ bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) {
}
bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm(
- const autofill::PasswordForm& form) {
+ const PasswordForm& form) {
DCHECK(login_metadata_db_);
bool has_match = false;
std::vector<std::unique_ptr<PasswordForm>> database_forms;
@@ -1383,40 +1338,36 @@ bool PasswordStoreMac::DatabaseHasFormMatchingKeychainForm(
}
void PasswordStoreMac::RemoveDatabaseForms(
- ScopedVector<autofill::PasswordForm>* forms) {
+ std::vector<std::unique_ptr<PasswordForm>>* forms) {
DCHECK(login_metadata_db_);
- ScopedVector<autofill::PasswordForm> removed_forms;
- MoveAllFormsOut(forms, [this, &removed_forms](
- std::unique_ptr<autofill::PasswordForm> form) {
+ std::vector<std::unique_ptr<PasswordForm>> removed_forms;
+ for (std::unique_ptr<PasswordForm>& form : *forms) {
if (login_metadata_db_->RemoveLogin(*form))
removed_forms.push_back(std::move(form));
- });
+ }
removed_forms.swap(*forms);
}
void PasswordStoreMac::RemoveKeychainForms(
- const std::vector<PasswordForm*>& forms) {
+ const std::vector<std::unique_ptr<PasswordForm>>& forms) {
MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_.get());
owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
- for (std::vector<PasswordForm*>::const_iterator i = forms.begin();
- i != forms.end(); ++i) {
- owned_keychain_adapter.RemovePassword(**i);
+ for (const auto& form : forms) {
+ owned_keychain_adapter.RemovePassword(*form);
}
}
void PasswordStoreMac::CleanOrphanedForms(
- ScopedVector<autofill::PasswordForm>* orphaned_forms) {
+ std::vector<std::unique_ptr<PasswordForm>>* orphaned_forms) {
DCHECK(orphaned_forms);
DCHECK(login_metadata_db_);
- std::vector<std::unique_ptr<PasswordForm>> database_forms_new_format;
- if (!login_metadata_db_->GetAutofillableLogins(&database_forms_new_format))
+ std::vector<std::unique_ptr<PasswordForm>> database_forms;
+ if (!login_metadata_db_->GetAutofillableLogins(&database_forms))
return;
- ScopedVector<PasswordForm> database_forms =
- ConvertToScopedVector(std::move(database_forms_new_format));
// Filter forms with corresponding Keychain entry out of |database_forms|.
- ScopedVector<PasswordForm> forms_with_keychain_entry;
+ std::vector<std::unique_ptr<PasswordForm>> forms_with_keychain_entry;
internal_keychain_helpers::GetPasswordsForForms(*keychain_, &database_forms,
&forms_with_keychain_entry);
« no previous file with comments | « chrome/browser/password_manager/password_store_mac.h ('k') | chrome/browser/password_manager/password_store_mac_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698