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

Unified Diff: components/autofill/core/browser/autofill_profile_comparator.h

Issue 2088443002: Expand autofill profile merge logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tommy's comments Created 4 years, 6 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_profile_comparator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/autofill/core/browser/autofill_profile_comparator.h
diff --git a/components/autofill/core/browser/autofill_profile_comparator.h b/components/autofill/core/browser/autofill_profile_comparator.h
index cdb1533552e4ec23a29f21d6698f6a31f0c6a718..0821db89742d349f381bd9d7e41a68b034bd2ac4 100644
--- a/components/autofill/core/browser/autofill_profile_comparator.h
+++ b/components/autofill/core/browser/autofill_profile_comparator.h
@@ -10,7 +10,9 @@
#include "base/strings/string16.h"
#include "base/strings/string_piece.h"
+#include "components/autofill/core/browser/address.h"
#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/contact_info.h"
#include "components/autofill/core/common/autofill_l10n_util.h"
#include "third_party/icu/source/i18n/unicode/translit.h"
@@ -45,13 +47,82 @@ class AutofillProfileComparator {
// incorporate data from both profiles.
bool AreMergeable(const AutofillProfile& p1, const AutofillProfile& p2) const;
+ // Populates |name_info| with the result of merging the names in |p1| and
+ // |p2|. Returns true if successful. Expects that |p1| and |p2| have already
+ // been found to be mergeable.
+ //
+ // Heuristic: If one name is empty, select the other; othwerwise, attempt to
+ // parse the names in each profile and determine if one name can be derived
+ // from the other. For example, J Smith can be derived from John Smith, so
+ // prefer the latter.
+ bool MergeNames(const AutofillProfile& p1,
+ const AutofillProfile& p2,
+ NameInfo* name_info) const;
+
+ // Populates |email_info| with the result of merging the email addresses in
+ // |p1| and |p2|. Returns true if successful. Expects that |p1| and |p2| have
+ // already been found to be mergeable.
+ //
+ // Heuristic: If one email address is empty, use the other; otherwise, prefer
+ // the most recently used version of the email address.
+ bool MergeEmailAddresses(const AutofillProfile& p1,
+ const AutofillProfile& p2,
+ EmailInfo* email_info) const;
+
+ // Populates |company_info| with the result of merging the company names in
+ // |p1| and |p2|. Returns true if successful. Expects that |p1| and |p2| have
+ // already been found to be mergeable.
+ //
+ // Heuristic: If one is empty, use the other; otherwise, if the tokens in one
+ // company name are a superset of those in the other, prefer the former; and,
+ // as a tiebreaker, prefer the most recently used version of the company name.
+ bool MergeCompanyNames(const AutofillProfile& p1,
+ const AutofillProfile& p2,
+ CompanyInfo* company_info) const;
+
+ // Populates |phone_number| with the result of merging the phone numbers in
+ // |p1| and |p2|. Returns true if successful. Expects that |p1| and |p2| have
+ // already been found to be mergeable.
+ //
+ // Heuristic: Populate the missing parts of each number from the other.
+ bool MergePhoneNumbers(const AutofillProfile& p1,
+ const AutofillProfile& p2,
+ PhoneNumber* phone_number) const;
+
+ // Populates |address| with the result of merging the addresses in |p1| and
+ // |p2|. Returns true if successful. Expects that |p1| and |p2| have already
+ // been found to be mergeable.
+ //
+ // Heuristic: Populate the missing parts of each address from the other.
+ // Prefer the abbreviated state, the shorter zip code and routing code, the
+ // more verbost city, dependent locality, and address.
+ bool MergeAddresses(const AutofillProfile& p1,
+ const AutofillProfile& p2,
+ Address* address) const;
+
protected:
+ // The result type returned by CompareTokens.
+ enum CompareTokensResult {
+ DIFFERENT_TOKENS,
+ SAME_TOKENS,
+ S1_CONTAINS_S2,
+ S2_CONTAINS_S1,
+ };
+
// Returns the set of unique tokens in |s|. Note that the string data backing
// |s| is expected to have a lifetime which exceeds the call to UniqueTokens.
static std::set<base::StringPiece16> UniqueTokens(base::StringPiece16 s);
- // Returns true if all of the tokens in |s1| are in |s2| or vice versa.
- static bool HaveSameTokens(base::StringPiece16 s1, base::StringPiece16 s2);
+ // Compares the unique tokens in s1 and s2.
+ static CompareTokensResult CompareTokens(base::StringPiece16 s1,
+ base::StringPiece16 s2);
+
+ // Returns the value of |t| from |p1| or |p2| depending on which is non-empty.
+ // This method expects that the value is either the same in |p1| and |p2| or
+ // empty in one of them.
+ base::string16 GetNonEmptyOf(const AutofillProfile& p1,
+ const AutofillProfile& p2,
+ AutofillType t) const;
// Generate the set of full/initial variants for |name_part|, where
// |name_part| is the user's first or middle name. For example, given "jean
@@ -129,6 +200,12 @@ class AutofillProfileComparator {
bool HaveMergeableAddresses(const AutofillProfile& p1,
const AutofillProfile& p2) const;
+ // Returns true if |state1| and |state2| both represent the same state in
+ // |country_code|.
+ bool IsMatchingState(const base::string16& country_code,
+ const base::string16& state1,
+ const base::string16& state2) const;
+
private:
l10n::CaseInsensitiveCompare case_insensitive_compare_;
std::unique_ptr<icu::Transliterator> transliterator_;
« no previous file with comments | « no previous file | components/autofill/core/browser/autofill_profile_comparator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698