Index: chrome/browser/password_manager/password_store_mac_internal.h |
diff --git a/chrome/browser/password_manager/password_store_mac_internal.h b/chrome/browser/password_manager/password_store_mac_internal.h |
index 245ecbbf6cd550794997603edd8e0be61967d101..dc9e35254bf295c178693e6cf1785e6607e993a9 100644 |
--- a/chrome/browser/password_manager/password_store_mac_internal.h |
+++ b/chrome/browser/password_manager/password_store_mac_internal.h |
@@ -10,6 +10,7 @@ |
#include <string> |
#include <vector> |
+#include "base/memory/scoped_vector.h" |
#include "components/autofill/core/common/password_form.h" |
#include "crypto/apple_keychain.h" |
@@ -24,11 +25,11 @@ class MacKeychainPasswordFormAdapter { |
// created object. |
explicit MacKeychainPasswordFormAdapter(const AppleKeychain* keychain); |
- // Returns PasswordForms for each keychain entry that could be used to fill |
- // |form|. Caller is responsible for deleting the returned forms. |
- std::vector<autofill::PasswordForm*> PasswordsFillingForm( |
- const std::string& signon_realm, |
- autofill::PasswordForm::Scheme scheme); |
+ // Appends to |forms| all keychain entries matching |signon_realm| and |
+ // |scheme|. |
+ void PasswordsFillingForm(const std::string& signon_realm, |
+ autofill::PasswordForm::Scheme scheme, |
+ ScopedVector<autofill::PasswordForm>* forms); |
// Returns true if there is the Keychain entry that matches |query_form| on |
// all of the fields that uniquely identify a Keychain item. |
@@ -45,9 +46,8 @@ class MacKeychainPasswordFormAdapter { |
// Returns all keychain items of types corresponding to password forms. |
std::vector<SecKeychainItemRef> GetAllPasswordFormKeychainItems(); |
- // Returns password data from all keychain items of types corresponding to |
- // password forms. Caller is responsible for deleting the returned forms. |
- std::vector<autofill::PasswordForm*> GetAllPasswordFormPasswords(); |
+ // Appends to |forms| all keychain entries corresponding to password forms. |
+ void GetAllPasswordFormPasswords(ScopedVector<autofill::PasswordForm>* forms); |
// Creates a new keychain entry from |form|, or updates the password of an |
// existing keychain entry if there is a collision. Returns true if a keychain |
@@ -63,11 +63,11 @@ class MacKeychainPasswordFormAdapter { |
void SetFindsOnlyOwnedItems(bool finds_only_owned); |
private: |
- // Returns PasswordForms constructed from the given Keychain items, calling |
- // AppleKeychain::Free on all of the keychain items and clearing the vector. |
- // Caller is responsible for deleting the returned forms. |
- std::vector<autofill::PasswordForm*> ConvertKeychainItemsToForms( |
- std::vector<SecKeychainItemRef>* items); |
+ // Transforms |items| to PasswordForm instances and appends them to |forms|. |
+ // Also calls AppleKeychain::Free on all of the keychain items and clears |
+ // |items|. |
+ void ConvertKeychainItemsToForms(std::vector<SecKeychainItemRef>* items, |
+ ScopedVector<autofill::PasswordForm>* forms); |
// Searches |keychain| for the specific keychain entry that corresponds to the |
// given form, and returns it (or NULL if no match is found). The caller is |
@@ -165,17 +165,16 @@ bool FormsMatchForMerge(const autofill::PasswordForm& form_a, |
// password can be found (and which aren't blacklist entries), and for |
// keychain_forms its entries that weren't merged into at least one database |
// form. |
-void MergePasswordForms( |
- std::vector<autofill::PasswordForm*>* keychain_forms, |
- std::vector<autofill::PasswordForm*>* database_forms, |
- std::vector<autofill::PasswordForm*>* merged_forms); |
- |
-// Fills in the passwords for as many of the forms in |database_forms| as |
-// possible using entries from |keychain| and returns them. On return, |
-// |database_forms| will contain only the forms for which no password was found. |
-std::vector<autofill::PasswordForm*> GetPasswordsForForms( |
- const AppleKeychain& keychain, |
- std::vector<autofill::PasswordForm*>* database_forms); |
+void MergePasswordForms(ScopedVector<autofill::PasswordForm>* keychain_forms, |
+ ScopedVector<autofill::PasswordForm>* database_forms, |
+ ScopedVector<autofill::PasswordForm>* merged_forms); |
+ |
+// For every form in |database_forms|, if such a form has a corresponding entry |
+// in |keychain|, this adds the password from the entry and moves that form from |
+// |database_forms| into |passwords|. |
+void GetPasswordsForForms(const AppleKeychain& keychain, |
+ ScopedVector<autofill::PasswordForm>* database_forms, |
+ ScopedVector<autofill::PasswordForm>* passwords); |
// Loads all items in the system keychain into |keychain_items|, creates for |
// each keychain item a corresponding PasswordForm that doesn't contain any |
@@ -206,13 +205,14 @@ bool ExtractSignonRealmComponents(const std::string& signon_realm, |
bool FormIsValidAndMatchesOtherForm(const autofill::PasswordForm& query_form, |
const autofill::PasswordForm& other_form); |
-// Returns PasswordForms populated with password data for each keychain entry |
-// in |item_form_pairs| that could be merged with |query_form|. |
-// Caller is responsible for deleting the returned forms. |
-std::vector<autofill::PasswordForm*> ExtractPasswordsMergeableWithForm( |
+// Appends, to |matches|, PasswordForm instances populated with password data |
+// for each keychain entry in |item_form_pairs| that could be merged with |
+// |query_form|. |
+void ExtractPasswordsMergeableWithForm( |
const AppleKeychain& keychain, |
const std::vector<ItemFormPair>& item_form_pairs, |
- const autofill::PasswordForm& query_form); |
+ const autofill::PasswordForm& query_form, |
+ ScopedVector<autofill::PasswordForm>* matches); |
} // namespace internal_keychain_helpers |