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

Unified Diff: chrome/browser/autofill/personal_data_manager.cc

Issue 6082001: Autofill saves duplicate profiles and credit card info in preferences (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Credit card and GUID functor. Created 10 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
« no previous file with comments | « chrome/browser/autofill/autofill_dialog_controller_mac.mm ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/personal_data_manager.cc
diff --git a/chrome/browser/autofill/personal_data_manager.cc b/chrome/browser/autofill/personal_data_manager.cc
index 8554064766ceebd56d20ab168f91a943eaf4adda..75f89cec002c5a7f6ad6873d590e47b60bc40b5a 100644
--- a/chrome/browser/autofill/personal_data_manager.cc
+++ b/chrome/browser/autofill/personal_data_manager.cc
@@ -11,6 +11,7 @@
#include "base/string_number_conversions.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autofill/autofill_field.h"
+#include "chrome/browser/autofill/autofill-inl.h"
#include "chrome/browser/autofill/form_structure.h"
#include "chrome/browser/autofill/phone_number.h"
#include "chrome/browser/browser_thread.h"
@@ -28,23 +29,16 @@ const int kMinProfileImportSize = 3;
const int kMinCreditCardImportSize = 2;
template<typename T>
-class FormGroupGUIDMatchesFunctor {
+class FormGroupMatchesByGUIDFunctor {
public:
- explicit FormGroupGUIDMatchesFunctor(const std::string& guid) : guid_(guid) {}
+ explicit FormGroupMatchesByGUIDFunctor(const std::string& guid)
+ : guid_(guid) {
+ }
bool operator()(const T& form_group) {
return form_group.guid() == guid_;
}
- private:
- std::string guid_;
-};
-
-template<typename T>
-class FormGroupGUIDMatchesFunctor<T *> {
- public:
- explicit FormGroupGUIDMatchesFunctor(const std::string& guid) : guid_(guid) {}
-
bool operator()(const T* form_group) {
return form_group->guid() == guid_;
}
@@ -53,6 +47,14 @@ class FormGroupGUIDMatchesFunctor<T *> {
std::string guid_;
};
+template<typename T, typename C>
+bool FindByGUID(const C& container, const std::string& guid) {
+ return std::find_if(
+ container.begin(),
+ container.end(),
+ FormGroupMatchesByGUIDFunctor<T>(guid)) != container.end();
+}
+
template<typename T>
class DereferenceFunctor {
public:
@@ -67,12 +69,6 @@ T* address_of(T& v) {
return &v;
}
-template<typename T, typename C>
-bool FindByGUID(const C& container, const std::string& guid) {
- return std::find_if(container.begin(), container.end(),
- FormGroupGUIDMatchesFunctor<T>(guid)) != container.end();
-}
-
} // namespace
PersonalDataManager::~PersonalDataManager() {
@@ -309,14 +305,15 @@ void PersonalDataManager::SetProfiles(std::vector<AutoFillProfile>* profiles) {
// Update the web database with the existing profiles.
for (std::vector<AutoFillProfile>::iterator iter = profiles->begin();
iter != profiles->end(); ++iter) {
- if (FindByGUID<AutoFillProfile*>(web_profiles_, iter->guid()))
+ if (FindByGUID<AutoFillProfile>(web_profiles_, iter->guid()))
wds->UpdateAutoFillProfileGUID(*iter);
}
- // Add the new profiles to the web database.
+ // Add the new profiles to the web database. Don't add a duplicate.
for (std::vector<AutoFillProfile>::iterator iter = profiles->begin();
iter != profiles->end(); ++iter) {
- if (!FindByGUID<AutoFillProfile*>(web_profiles_, iter->guid()))
+ if (!FindByGUID<AutoFillProfile>(web_profiles_, iter->guid()) &&
+ !FindByContents(web_profiles_, *iter))
wds->AddAutoFillProfileGUID(*iter);
}
@@ -362,14 +359,15 @@ void PersonalDataManager::SetCreditCards(
// Update the web database with the existing credit cards.
for (std::vector<CreditCard>::iterator iter = credit_cards->begin();
iter != credit_cards->end(); ++iter) {
- if (FindByGUID<CreditCard*>(credit_cards_, iter->guid()))
+ if (FindByGUID<CreditCard>(credit_cards_, iter->guid()))
wds->UpdateCreditCardGUID(*iter);
}
- // Add the new credit cards to the web database.
+ // Add the new credit cards to the web database. Don't add a duplicate.
for (std::vector<CreditCard>::iterator iter = credit_cards->begin();
iter != credit_cards->end(); ++iter) {
- if (!FindByGUID<CreditCard*>(credit_cards_, iter->guid()))
+ if (!FindByGUID<CreditCard>(credit_cards_, iter->guid()) &&
+ !FindByContents(credit_cards_, *iter))
wds->AddCreditCardGUID(*iter);
}
@@ -479,7 +477,7 @@ void PersonalDataManager::RemoveProfile(const std::string& guid) {
// Remove the profile that matches |guid|.
profiles.erase(
std::remove_if(profiles.begin(), profiles.end(),
- FormGroupGUIDMatchesFunctor<AutoFillProfile>(guid)),
+ FormGroupMatchesByGUIDFunctor<AutoFillProfile>(guid)),
profiles.end());
SetProfiles(&profiles);
@@ -535,7 +533,7 @@ void PersonalDataManager::RemoveCreditCard(const std::string& guid) {
// Remove the credit card that matches |guid|.
credit_cards.erase(
std::remove_if(credit_cards.begin(), credit_cards.end(),
- FormGroupGUIDMatchesFunctor<CreditCard>(guid)),
+ FormGroupMatchesByGUIDFunctor<CreditCard>(guid)),
credit_cards.end());
SetCreditCards(&credit_cards);
« no previous file with comments | « chrome/browser/autofill/autofill_dialog_controller_mac.mm ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698