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

Unified Diff: components/autofill/core/browser/autofill_manager.cc

Issue 2864483005: Uses AutofillProfileComparator to compare profile names. (Closed)
Patch Set: Reorder method definitions to match declaration order. Created 3 years, 7 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 | « no previous file | components/autofill/core/browser/autofill_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/autofill/core/browser/autofill_manager.cc
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 4aa8554fa316e26b4589543c47778820b3c1d27b..60a8a54fe5940a098fa00e6ebfafe83daa43264b 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -123,29 +123,6 @@ base::string16 SanitizeCreditCardFieldValue(const base::string16& value) {
return sanitized;
}
-// If |name| consists of three whitespace-separated parts and the second of the
-// three parts is a single character or a single character followed by a period,
-// returns the result of joining the first and third parts with a space.
-// Otherwise, returns |name|.
-//
-// Note that a better way to do this would be to use SplitName from
-// src/components/autofill/core/browser/contact_info.cc. However, for now we
-// want the logic of which variations of names are considered to be the same to
-// exactly match the logic applied on the Payments server.
-base::string16 RemoveMiddleInitial(const base::string16& name) {
- std::vector<base::StringPiece16> parts =
- base::SplitStringPiece(name, base::kWhitespaceUTF16,
- base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
- if (parts.size() == 3 && (parts[1].length() == 1 ||
- (parts[1].length() == 2 &&
- base::EndsWith(parts[1], base::ASCIIToUTF16("."),
- base::CompareCase::SENSITIVE)))) {
- parts.erase(parts.begin() + 1);
- return base::JoinString(parts, base::ASCIIToUTF16(" "));
- }
- return name;
-}
-
// Returns whether the |field| is predicted as being any kind of name.
bool IsNameType(const AutofillField& field) {
return field.Type().group() == NAME || field.Type().group() == NAME_BILLING ||
@@ -1335,28 +1312,26 @@ int AutofillManager::GetProfilesForCreditCardUpload(
*rappor_metric_name = "Autofill.CardUploadNotOfferedNoAddress";
}
- // If any of the names on the card or the addresses don't match (where
- // matching is case insensitive and ignores middle initials if present), the
+ // If any of the names on the card or the addresses don't match the
// candidate set is invalid. This matches the rules for name matching applied
// server-side by Google Payments and ensures that we don't send upload
// requests that are guaranteed to fail.
- base::string16 verified_name;
const base::string16 card_name =
card.GetInfo(AutofillType(CREDIT_CARD_NAME_FULL), app_locale_);
- if (!card_name.empty()) {
- verified_name = RemoveMiddleInitial(card_name);
- }
- for (const AutofillProfile& profile : candidate_profiles) {
- const base::string16 address_name =
- profile.GetInfo(AutofillType(NAME_FULL), app_locale_);
- if (!address_name.empty()) {
- if (verified_name.empty()) {
- verified_name = RemoveMiddleInitial(address_name);
- } else {
- // TODO(crbug.com/590307): We'll need to make the name comparison more
- // sophisticated.
- if (!base::EqualsCaseInsensitiveASCII(
- verified_name, RemoveMiddleInitial(address_name))) {
+ base::string16 verified_name;
+ if (candidate_profiles.empty()) {
+ verified_name = card_name;
+ } else {
+ AutofillProfileComparator comparator(app_locale_);
+ verified_name = comparator.NormalizeForComparison(card_name);
+ for (const AutofillProfile& profile : candidate_profiles) {
+ const base::string16 address_name = comparator.NormalizeForComparison(
+ profile.GetInfo(AutofillType(NAME_FULL), app_locale_));
+ if (!address_name.empty()) {
+ if (verified_name.empty() ||
+ comparator.IsNameVariantOf(address_name, verified_name)) {
+ verified_name = address_name;
+ } else if (!comparator.IsNameVariantOf(verified_name, address_name)) {
if (!upload_decision_metrics)
*rappor_metric_name =
"Autofill.CardUploadNotOfferedConflictingNames";
@@ -1367,6 +1342,7 @@ int AutofillManager::GetProfilesForCreditCardUpload(
}
}
}
+
// If neither the card nor any of the addresses have a name associated with
// them, the candidate set is invalid.
if (verified_name.empty()) {
« no previous file with comments | « no previous file | components/autofill/core/browser/autofill_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698