| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/core/browser/contact_info.h" | 5 #include "components/autofill/core/browser/contact_info.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <ostream> | 8 #include <ostream> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 if (this == &info) | 152 if (this == &info) |
| 153 return *this; | 153 return *this; |
| 154 | 154 |
| 155 given_ = info.given_; | 155 given_ = info.given_; |
| 156 middle_ = info.middle_; | 156 middle_ = info.middle_; |
| 157 family_ = info.family_; | 157 family_ = info.family_; |
| 158 full_ = info.full_; | 158 full_ = info.full_; |
| 159 return *this; | 159 return *this; |
| 160 } | 160 } |
| 161 | 161 |
| 162 bool NameInfo::EqualsIgnoreCase(const NameInfo& info) { | 162 bool NameInfo::ParsedNamesAreEqual(const NameInfo& info) { |
| 163 return (StringToLowerASCII(given_) == StringToLowerASCII(info.given_) && | 163 return (StringToLowerASCII(given_) == StringToLowerASCII(info.given_) && |
| 164 StringToLowerASCII(middle_) == StringToLowerASCII(info.middle_) && | 164 StringToLowerASCII(middle_) == StringToLowerASCII(info.middle_) && |
| 165 StringToLowerASCII(family_) == StringToLowerASCII(info.family_)); | 165 StringToLowerASCII(family_) == StringToLowerASCII(info.family_)); |
| 166 } | 166 } |
| 167 | 167 |
| 168 void NameInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const { | 168 void NameInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const { |
| 169 supported_types->insert(NAME_FIRST); | 169 supported_types->insert(NAME_FIRST); |
| 170 supported_types->insert(NAME_MIDDLE); | 170 supported_types->insert(NAME_MIDDLE); |
| 171 supported_types->insert(NAME_LAST); | 171 supported_types->insert(NAME_LAST); |
| 172 supported_types->insert(NAME_MIDDLE_INITIAL); | 172 supported_types->insert(NAME_MIDDLE_INITIAL); |
| 173 supported_types->insert(NAME_FULL); | 173 supported_types->insert(NAME_FULL); |
| 174 } | 174 } |
| 175 | 175 |
| 176 base::string16 NameInfo::GetRawInfo(ServerFieldType type) const { | 176 base::string16 NameInfo::GetRawInfo(ServerFieldType type) const { |
| 177 DCHECK_EQ(NAME, AutofillType(type).group()); | 177 DCHECK_EQ(NAME, AutofillType(type).group()); |
| 178 switch (type) { | 178 switch (type) { |
| 179 case NAME_FIRST: | 179 case NAME_FIRST: |
| 180 return given_; | 180 return given_; |
| 181 | 181 |
| 182 case NAME_MIDDLE: | 182 case NAME_MIDDLE: |
| 183 return middle_; | 183 return middle_; |
| 184 | 184 |
| 185 case NAME_LAST: | 185 case NAME_LAST: |
| 186 return family_; | 186 return family_; |
| 187 | 187 |
| 188 case NAME_MIDDLE_INITIAL: | 188 case NAME_MIDDLE_INITIAL: |
| 189 return MiddleInitial(); | 189 return MiddleInitial(); |
| 190 | 190 |
| 191 case NAME_FULL: | 191 case NAME_FULL: |
| 192 return FullName(); | 192 return full_; |
| 193 | 193 |
| 194 default: | 194 default: |
| 195 return base::string16(); | 195 return base::string16(); |
| 196 } | 196 } |
| 197 } | 197 } |
| 198 | 198 |
| 199 void NameInfo::SetRawInfo(ServerFieldType type, const base::string16& value) { | 199 void NameInfo::SetRawInfo(ServerFieldType type, const base::string16& value) { |
| 200 DCHECK_EQ(NAME, AutofillType(type).group()); | 200 DCHECK_EQ(NAME, AutofillType(type).group()); |
| 201 | 201 |
| 202 // Always clear out the full name if we're making a change. | |
| 203 if (value != GetRawInfo(type)) | |
| 204 full_.clear(); | |
| 205 | |
| 206 switch (type) { | 202 switch (type) { |
| 207 case NAME_FIRST: | 203 case NAME_FIRST: |
| 208 given_ = value; | 204 given_ = value; |
| 209 break; | 205 break; |
| 210 | 206 |
| 211 case NAME_MIDDLE: | 207 case NAME_MIDDLE: |
| 212 case NAME_MIDDLE_INITIAL: | 208 case NAME_MIDDLE_INITIAL: |
| 213 middle_ = value; | 209 middle_ = value; |
| 214 break; | 210 break; |
| 215 | 211 |
| 216 case NAME_LAST: | 212 case NAME_LAST: |
| 217 family_ = value; | 213 family_ = value; |
| 218 break; | 214 break; |
| 219 | 215 |
| 220 case NAME_FULL: | 216 case NAME_FULL: |
| 221 // TODO(estade): this should just set |full_|; only SetInfo should attempt | 217 full_ = value; |
| 222 // to be smart. http://crbug.com/384640 | |
| 223 SetFullName(value); | |
| 224 break; | 218 break; |
| 225 | 219 |
| 226 default: | 220 default: |
| 227 NOTREACHED(); | 221 NOTREACHED(); |
| 228 } | 222 } |
| 229 } | 223 } |
| 230 | 224 |
| 225 base::string16 NameInfo::GetInfo(const AutofillType& type, |
| 226 const std::string& app_locale) const { |
| 227 if (type.GetStorableType() == NAME_FULL) |
| 228 return FullName(); |
| 229 |
| 230 return GetRawInfo(type.GetStorableType()); |
| 231 } |
| 232 |
| 233 bool NameInfo::SetInfo(const AutofillType& type, |
| 234 const base::string16& value, |
| 235 const std::string& app_locale) { |
| 236 // Always clear out the full name if we're making a change. |
| 237 if (value != GetInfo(type, app_locale)) |
| 238 full_.clear(); |
| 239 |
| 240 if (type.GetStorableType() == NAME_FULL) { |
| 241 SetFullName(value); |
| 242 return true; |
| 243 } |
| 244 |
| 245 return FormGroup::SetInfo(type, value, app_locale); |
| 246 } |
| 247 |
| 231 base::string16 NameInfo::FullName() const { | 248 base::string16 NameInfo::FullName() const { |
| 232 if (!full_.empty()) | 249 if (!full_.empty()) |
| 233 return full_; | 250 return full_; |
| 234 | 251 |
| 235 std::vector<base::string16> full_name; | 252 std::vector<base::string16> full_name; |
| 236 if (!given_.empty()) | 253 if (!given_.empty()) |
| 237 full_name.push_back(given_); | 254 full_name.push_back(given_); |
| 238 | 255 |
| 239 if (!middle_.empty()) | 256 if (!middle_.empty()) |
| 240 full_name.push_back(middle_); | 257 full_name.push_back(middle_); |
| 241 | 258 |
| 242 if (!family_.empty()) | 259 if (!family_.empty()) |
| 243 full_name.push_back(family_); | 260 full_name.push_back(family_); |
| 244 | 261 |
| 245 return JoinString(full_name, ' '); | 262 return JoinString(full_name, ' '); |
| 246 } | 263 } |
| 247 | 264 |
| 248 base::string16 NameInfo::MiddleInitial() const { | 265 base::string16 NameInfo::MiddleInitial() const { |
| 249 if (middle_.empty()) | 266 if (middle_.empty()) |
| 250 return base::string16(); | 267 return base::string16(); |
| 251 | 268 |
| 252 base::string16 middle_name(middle_); | 269 base::string16 middle_name(middle_); |
| 253 base::string16 initial; | 270 base::string16 initial; |
| 254 initial.push_back(middle_name[0]); | 271 initial.push_back(middle_name[0]); |
| 255 return initial; | 272 return initial; |
| 256 } | 273 } |
| 257 | 274 |
| 258 void NameInfo::SetFullName(const base::string16& full) { | 275 void NameInfo::SetFullName(const base::string16& full) { |
| 259 // Hack: don't do anything if this wouldn't change the full, concatenated | |
| 260 // name. Otherwise when unpickling data from the database, "First|Middle|" | |
| 261 // will get parsed as "First||Middle". | |
| 262 // TODO(estade): we should be able to remove this when fixing the TODO in | |
| 263 // SetRawInfo. http://crbug.com/384640 | |
| 264 if (FullName() == full) | |
| 265 return; | |
| 266 | |
| 267 full_ = full; | 276 full_ = full; |
| 268 | 277 |
| 269 // If |full| is empty, leave the other name parts alone. This might occur | 278 // If |full| is empty, leave the other name parts alone. This might occur |
| 270 // due to a migrated database with an empty |full_name| value. | 279 // due to a migrated database with an empty |full_name| value. |
| 271 if (full.empty()) | 280 if (full.empty()) |
| 272 return; | 281 return; |
| 273 | 282 |
| 274 NameParts parts = SplitName(full); | 283 NameParts parts = SplitName(full); |
| 275 given_ = parts.given; | 284 given_ = parts.given; |
| 276 middle_ = parts.middle; | 285 middle_ = parts.middle; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 return base::string16(); | 345 return base::string16(); |
| 337 } | 346 } |
| 338 | 347 |
| 339 void CompanyInfo::SetRawInfo(ServerFieldType type, | 348 void CompanyInfo::SetRawInfo(ServerFieldType type, |
| 340 const base::string16& value) { | 349 const base::string16& value) { |
| 341 DCHECK_EQ(COMPANY_NAME, type); | 350 DCHECK_EQ(COMPANY_NAME, type); |
| 342 company_name_ = value; | 351 company_name_ = value; |
| 343 } | 352 } |
| 344 | 353 |
| 345 } // namespace autofill | 354 } // namespace autofill |
| OLD | NEW |