Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "components/autofill/core/browser/contact_info.h" |
| 6 | |
| 7 | #include <stddef.h> |
| 8 | #include <ostream> |
| 9 | #include <string> |
| 10 | |
| 11 | #include "base/basictypes.h" |
| 12 | #include "base/logging.h" |
| 13 | #include "base/strings/string_util.h" |
| 14 | #include "base/strings/utf_string_conversions.h" |
| 15 | #include "components/autofill/core/browser/autofill_type.h" |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 16 | |
| 17 | namespace autofill { |
| 18 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 19 | static const ServerFieldType kAutofillNameInfoTypes[] = { |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 20 | NAME_FIRST, |
| 21 | NAME_MIDDLE, |
| 22 | NAME_LAST |
| 23 | }; |
| 24 | |
| 25 | static const size_t kAutofillNameInfoLength = |
| 26 | arraysize(kAutofillNameInfoTypes); |
| 27 | |
| 28 | NameInfo::NameInfo() {} |
| 29 | |
| 30 | NameInfo::NameInfo(const NameInfo& info) : FormGroup() { |
| 31 | *this = info; |
| 32 | } |
| 33 | |
| 34 | NameInfo::~NameInfo() {} |
| 35 | |
| 36 | NameInfo& NameInfo::operator=(const NameInfo& info) { |
| 37 | if (this == &info) |
| 38 | return *this; |
| 39 | |
| 40 | first_ = info.first_; |
| 41 | middle_ = info.middle_; |
| 42 | last_ = info.last_; |
| 43 | return *this; |
| 44 | } |
| 45 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 46 | void NameInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const { |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 47 | supported_types->insert(NAME_FIRST); |
| 48 | supported_types->insert(NAME_MIDDLE); |
| 49 | supported_types->insert(NAME_LAST); |
| 50 | supported_types->insert(NAME_MIDDLE_INITIAL); |
| 51 | supported_types->insert(NAME_FULL); |
| 52 | } |
| 53 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 54 | base::string16 NameInfo::GetRawInfo(ServerFieldType type) const { |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 55 | // TODO(isherman): Is GetStorableType even necessary? |
| 56 | switch (AutofillType(type).GetStorableType()) { |
| 57 | case NAME_FIRST: |
| 58 | return first(); |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 59 | |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 60 | case NAME_MIDDLE: |
| 61 | return middle(); |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 62 | |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 63 | case NAME_LAST: |
| 64 | return last(); |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 65 | |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 66 | case NAME_MIDDLE_INITIAL: |
| 67 | return MiddleInitial(); |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 68 | |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 69 | case NAME_FULL: |
| 70 | return FullName(); |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 71 | |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 72 | default: |
| 73 | return base::string16(); |
| 74 | } |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 75 | } |
| 76 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 77 | void NameInfo::SetRawInfo(ServerFieldType type, const base::string16& value) { |
Ben Murdoch | bb1529c | 2013-08-08 10:24:53 +0100 | [diff] [blame^] | 78 | // TODO(isherman): Is GetStorableType even necessary? |
| 79 | ServerFieldType storable_type = AutofillType(type).GetStorableType(); |
| 80 | DCHECK_EQ(NAME, AutofillType(storable_type).group()); |
| 81 | switch (storable_type) { |
| 82 | case NAME_FIRST: |
| 83 | first_ = value; |
| 84 | break; |
| 85 | |
| 86 | case NAME_MIDDLE: |
| 87 | case NAME_MIDDLE_INITIAL: |
| 88 | middle_ = value; |
| 89 | break; |
| 90 | |
| 91 | case NAME_LAST: |
| 92 | last_ = value; |
| 93 | break; |
| 94 | |
| 95 | case NAME_FULL: |
| 96 | SetFullName(value); |
| 97 | break; |
| 98 | |
| 99 | default: |
| 100 | NOTREACHED(); |
| 101 | } |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 102 | } |
| 103 | |
| 104 | base::string16 NameInfo::FullName() const { |
| 105 | std::vector<base::string16> full_name; |
| 106 | if (!first_.empty()) |
| 107 | full_name.push_back(first_); |
| 108 | |
| 109 | if (!middle_.empty()) |
| 110 | full_name.push_back(middle_); |
| 111 | |
| 112 | if (!last_.empty()) |
| 113 | full_name.push_back(last_); |
| 114 | |
| 115 | return JoinString(full_name, ' '); |
| 116 | } |
| 117 | |
| 118 | base::string16 NameInfo::MiddleInitial() const { |
| 119 | if (middle_.empty()) |
| 120 | return base::string16(); |
| 121 | |
| 122 | base::string16 middle_name(middle()); |
| 123 | base::string16 initial; |
| 124 | initial.push_back(middle_name[0]); |
| 125 | return initial; |
| 126 | } |
| 127 | |
| 128 | void NameInfo::SetFullName(const base::string16& full) { |
| 129 | // Clear the names. |
| 130 | first_ = base::string16(); |
| 131 | middle_ = base::string16(); |
| 132 | last_ = base::string16(); |
| 133 | |
| 134 | std::vector<base::string16> full_name_tokens; |
| 135 | Tokenize(full, ASCIIToUTF16(" "), &full_name_tokens); |
| 136 | |
| 137 | // There are four possibilities: empty; first name; first and last names; |
| 138 | // first, middle (possibly multiple strings) and then the last name. |
| 139 | if (full_name_tokens.size() > 0) { |
| 140 | first_ = full_name_tokens[0]; |
| 141 | if (full_name_tokens.size() > 1) { |
| 142 | last_ = full_name_tokens.back(); |
| 143 | if (full_name_tokens.size() > 2) { |
| 144 | full_name_tokens.erase(full_name_tokens.begin()); |
| 145 | full_name_tokens.pop_back(); |
| 146 | middle_ = JoinString(full_name_tokens, ' '); |
| 147 | } |
| 148 | } |
| 149 | } |
| 150 | } |
| 151 | |
| 152 | EmailInfo::EmailInfo() {} |
| 153 | |
| 154 | EmailInfo::EmailInfo(const EmailInfo& info) : FormGroup() { |
| 155 | *this = info; |
| 156 | } |
| 157 | |
| 158 | EmailInfo::~EmailInfo() {} |
| 159 | |
| 160 | EmailInfo& EmailInfo::operator=(const EmailInfo& info) { |
| 161 | if (this == &info) |
| 162 | return *this; |
| 163 | |
| 164 | email_ = info.email_; |
| 165 | return *this; |
| 166 | } |
| 167 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 168 | void EmailInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const { |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 169 | supported_types->insert(EMAIL_ADDRESS); |
| 170 | } |
| 171 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 172 | base::string16 EmailInfo::GetRawInfo(ServerFieldType type) const { |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 173 | if (type == EMAIL_ADDRESS) |
| 174 | return email_; |
| 175 | |
| 176 | return base::string16(); |
| 177 | } |
| 178 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 179 | void EmailInfo::SetRawInfo(ServerFieldType type, const base::string16& value) { |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 180 | DCHECK_EQ(EMAIL_ADDRESS, type); |
| 181 | email_ = value; |
| 182 | } |
| 183 | |
| 184 | CompanyInfo::CompanyInfo() {} |
| 185 | |
| 186 | CompanyInfo::CompanyInfo(const CompanyInfo& info) : FormGroup() { |
| 187 | *this = info; |
| 188 | } |
| 189 | |
| 190 | CompanyInfo::~CompanyInfo() {} |
| 191 | |
| 192 | CompanyInfo& CompanyInfo::operator=(const CompanyInfo& info) { |
| 193 | if (this == &info) |
| 194 | return *this; |
| 195 | |
| 196 | company_name_ = info.company_name_; |
| 197 | return *this; |
| 198 | } |
| 199 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 200 | void CompanyInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const { |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 201 | supported_types->insert(COMPANY_NAME); |
| 202 | } |
| 203 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 204 | base::string16 CompanyInfo::GetRawInfo(ServerFieldType type) const { |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 205 | if (type == COMPANY_NAME) |
| 206 | return company_name_; |
| 207 | |
| 208 | return base::string16(); |
| 209 | } |
| 210 | |
Ben Murdoch | 3240926 | 2013-08-07 11:04:47 +0100 | [diff] [blame] | 211 | void CompanyInfo::SetRawInfo(ServerFieldType type, |
Ben Murdoch | eb525c5 | 2013-07-10 11:40:50 +0100 | [diff] [blame] | 212 | const base::string16& value) { |
| 213 | DCHECK_EQ(COMPANY_NAME, type); |
| 214 | company_name_ = value; |
| 215 | } |
| 216 | |
| 217 | } // namespace autofill |