Index: components/autofill/core/browser/contact_info.cc |
diff --git a/components/autofill/core/browser/contact_info.cc b/components/autofill/core/browser/contact_info.cc |
index 0793bb5ff310c507941a7edd69bca4dfe57345b3..e0c8a1d60ea370bdc3f96b511e957f847c000b84 100644 |
--- a/components/autofill/core/browser/contact_info.cc |
+++ b/components/autofill/core/browser/contact_info.cc |
@@ -115,27 +115,73 @@ base::string16 NameInfo::MiddleInitial() const { |
} |
void NameInfo::SetFullName(const base::string16& full) { |
Ilya Sherman
2014/05/15 22:21:27
You shouldn't need to make any changes to this met
Pritam Nikam
2014/05/19 12:09:15
Done.
|
- // Clear the names. |
- first_ = base::string16(); |
- middle_ = base::string16(); |
- last_ = base::string16(); |
+ // search whether full_name_ holds first_, middle_ or last_ names |
+ // parsing the full_name_ gives values for first_, middle_, and last_ fields. |
+ base::string16 str = (base::string16)full; |
+ std::size_t foundFirst = base::string16::npos; |
+ if (!first_.empty()) |
+ foundFirst = str.find(first_); |
+ |
+ std::size_t foundMiddle = base::string16::npos; |
+ if (!middle_.empty()) |
+ foundMiddle = str.find(middle_); |
+ std::size_t foundLast = base::string16::npos; |
+ if (!last_.empty()) |
+ foundLast = str.find(last_); |
+ // tokenize full name |
std::vector<base::string16> full_name_tokens; |
- Tokenize(full, base::ASCIIToUTF16(" "), &full_name_tokens); |
- |
- // There are four possibilities: empty; first name; first and last names; |
- // first, middle (possibly multiple strings) and then the last name. |
- if (full_name_tokens.size() > 0) { |
- first_ = full_name_tokens[0]; |
- if (full_name_tokens.size() > 1) { |
- last_ = full_name_tokens.back(); |
- if (full_name_tokens.size() > 2) { |
- full_name_tokens.erase(full_name_tokens.begin()); |
- full_name_tokens.pop_back(); |
- middle_ = JoinString(full_name_tokens, ' '); |
+ Tokenize(str, base::ASCIIToUTF16(" "), &full_name_tokens); |
+ |
+ // first name |
+ if (first_.empty()) { |
+ if (foundMiddle != base::string16::npos) { |
+ if (foundMiddle != 0) { |
+ base::string16 name = str.substr(0, foundMiddle); |
+ TrimWhitespace(name, base::TRIM_ALL, &first_); |
} |
+ } else { |
+ if (foundLast != base::string16::npos) { |
+ if (foundLast != 0) |
+ first_ = full_name_tokens[0]; |
+ } else |
+ first_ = full_name_tokens[0]; |
} |
} |
+ |
+ // last name |
+ if (last_.empty()) { |
+ if (foundMiddle != base::string16::npos) { |
+ if (middle_ != str) { |
+ base::string16 name = |
+ str.substr(foundMiddle + middle_.length(), |
+ str.length() - (foundMiddle + middle_.length())); |
+ TrimWhitespace(name, base::TRIM_ALL, &last_); |
+ } |
+ } else { |
+ foundFirst = str.find(first_); |
+ if (foundFirst != base::string16::npos) { |
+ str.erase(foundFirst, first_.length()); |
+ if (!str.empty()) |
+ last_ = full_name_tokens[full_name_tokens.size() - 1]; |
+ } else |
+ last_ = full_name_tokens[full_name_tokens.size() - 1]; |
+ } |
+ } |
+ |
+ // middle name |
+ if (middle_.empty()) { |
+ foundFirst = str.find(first_); |
+ |
+ if (foundFirst != base::string16::npos) |
+ str.erase(foundFirst, first_.length()); |
+ |
+ foundLast = str.find(last_); |
+ if (foundLast != base::string16::npos) |
+ str.erase(foundLast, str.length()); |
+ |
+ TrimWhitespace(str, base::TRIM_ALL, &middle_); |
+ } |
} |
EmailInfo::EmailInfo() {} |