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

Side by Side Diff: components/autofill/core/browser/contact_info.cc

Issue 347183005: autofill names - dont parse when calling SetRawInfo(FULL_NAME) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix buncha stuff Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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::ParsedBitsAreEqual(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 middle_.size() == info.middle_.size() &&
Ilya Sherman 2014/06/27 06:25:08 Why is this check necessary? How can the strings
Evan Stade 2014/06/28 01:01:35 this is totally not necessary. It was just me bein
165 StringToLowerASCII(family_) == StringToLowerASCII(info.family_)); 166 StringToLowerASCII(family_) == StringToLowerASCII(info.family_));
166 } 167 }
167 168
168 void NameInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const { 169 void NameInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
169 supported_types->insert(NAME_FIRST); 170 supported_types->insert(NAME_FIRST);
170 supported_types->insert(NAME_MIDDLE); 171 supported_types->insert(NAME_MIDDLE);
171 supported_types->insert(NAME_LAST); 172 supported_types->insert(NAME_LAST);
172 supported_types->insert(NAME_MIDDLE_INITIAL); 173 supported_types->insert(NAME_MIDDLE_INITIAL);
173 supported_types->insert(NAME_FULL); 174 supported_types->insert(NAME_FULL);
174 } 175 }
175 176
176 base::string16 NameInfo::GetRawInfo(ServerFieldType type) const { 177 base::string16 NameInfo::GetRawInfo(ServerFieldType type) const {
177 DCHECK_EQ(NAME, AutofillType(type).group()); 178 DCHECK_EQ(NAME, AutofillType(type).group());
178 switch (type) { 179 switch (type) {
179 case NAME_FIRST: 180 case NAME_FIRST:
180 return given_; 181 return given_;
181 182
182 case NAME_MIDDLE: 183 case NAME_MIDDLE:
183 return middle_; 184 return middle_;
184 185
185 case NAME_LAST: 186 case NAME_LAST:
186 return family_; 187 return family_;
187 188
188 case NAME_MIDDLE_INITIAL: 189 case NAME_MIDDLE_INITIAL:
189 return MiddleInitial(); 190 return MiddleInitial();
190 191
191 case NAME_FULL: 192 case NAME_FULL:
192 return FullName(); 193 return full_;
193 194
194 default: 195 default:
195 return base::string16(); 196 return base::string16();
196 } 197 }
197 } 198 }
198 199
199 void NameInfo::SetRawInfo(ServerFieldType type, const base::string16& value) { 200 void NameInfo::SetRawInfo(ServerFieldType type, const base::string16& value) {
200 DCHECK_EQ(NAME, AutofillType(type).group()); 201 DCHECK_EQ(NAME, AutofillType(type).group());
201 202
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) { 203 switch (type) {
207 case NAME_FIRST: 204 case NAME_FIRST:
208 given_ = value; 205 given_ = value;
209 break; 206 break;
210 207
211 case NAME_MIDDLE: 208 case NAME_MIDDLE:
212 case NAME_MIDDLE_INITIAL: 209 case NAME_MIDDLE_INITIAL:
213 middle_ = value; 210 middle_ = value;
214 break; 211 break;
215 212
216 case NAME_LAST: 213 case NAME_LAST:
217 family_ = value; 214 family_ = value;
218 break; 215 break;
219 216
220 case NAME_FULL: 217 case NAME_FULL:
221 // TODO(estade): this should just set |full_|; only SetInfo should attempt 218 full_ = value;
222 // to be smart. http://crbug.com/384640
223 SetFullName(value);
224 break; 219 break;
225 220
226 default: 221 default:
227 NOTREACHED(); 222 NOTREACHED();
228 } 223 }
229 } 224 }
230 225
226 base::string16 NameInfo::GetInfo(const AutofillType& type,
227 const std::string& app_locale) const {
228 if (type.GetStorableType() == NAME_FULL)
229 return FullName();
230
231 return GetRawInfo(type.GetStorableType());
232 }
233
234 bool NameInfo::SetInfo(const AutofillType& type,
235 const base::string16& value,
236 const std::string& app_locale) {
237 // Always clear out the full name if we're making a change.
238 if (value != GetInfo(type, app_locale))
239 full_.clear();
240
241 if (type.GetStorableType() == NAME_FULL) {
242 SetFullName(value);
243 return true;
244 }
245
246 return FormGroup::SetInfo(type, value, app_locale);
247 }
248
231 base::string16 NameInfo::FullName() const { 249 base::string16 NameInfo::FullName() const {
232 if (!full_.empty()) 250 if (!full_.empty())
233 return full_; 251 return full_;
234 252
235 std::vector<base::string16> full_name; 253 std::vector<base::string16> full_name;
236 if (!given_.empty()) 254 if (!given_.empty())
237 full_name.push_back(given_); 255 full_name.push_back(given_);
238 256
239 if (!middle_.empty()) 257 if (!middle_.empty())
240 full_name.push_back(middle_); 258 full_name.push_back(middle_);
241 259
242 if (!family_.empty()) 260 if (!family_.empty())
243 full_name.push_back(family_); 261 full_name.push_back(family_);
244 262
245 return JoinString(full_name, ' '); 263 return JoinString(full_name, ' ');
246 } 264 }
247 265
248 base::string16 NameInfo::MiddleInitial() const { 266 base::string16 NameInfo::MiddleInitial() const {
249 if (middle_.empty()) 267 if (middle_.empty())
250 return base::string16(); 268 return base::string16();
251 269
252 base::string16 middle_name(middle_); 270 base::string16 middle_name(middle_);
253 base::string16 initial; 271 base::string16 initial;
254 initial.push_back(middle_name[0]); 272 initial.push_back(middle_name[0]);
255 return initial; 273 return initial;
256 } 274 }
257 275
258 void NameInfo::SetFullName(const base::string16& full) { 276 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; 277 full_ = full;
268 278
269 // If |full| is empty, leave the other name parts alone. This might occur 279 // 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. 280 // due to a migrated database with an empty |full_name| value.
271 if (full.empty()) 281 if (full.empty())
272 return; 282 return;
273 283
274 NameParts parts = SplitName(full); 284 NameParts parts = SplitName(full);
275 given_ = parts.given; 285 given_ = parts.given;
276 middle_ = parts.middle; 286 middle_ = parts.middle;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 return base::string16(); 346 return base::string16();
337 } 347 }
338 348
339 void CompanyInfo::SetRawInfo(ServerFieldType type, 349 void CompanyInfo::SetRawInfo(ServerFieldType type,
340 const base::string16& value) { 350 const base::string16& value) {
341 DCHECK_EQ(COMPANY_NAME, type); 351 DCHECK_EQ(COMPANY_NAME, type);
342 company_name_ = value; 352 company_name_ = value;
343 } 353 }
344 354
345 } // namespace autofill 355 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698