OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/autofill/phone_field.h" | 5 #include "chrome/browser/autofill/phone_field.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/string16.h" | 9 #include "base/string16.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 } | 117 } |
118 | 118 |
119 return NULL; | 119 return NULL; |
120 } | 120 } |
121 | 121 |
122 // static | 122 // static |
123 PhoneField* PhoneField::ParseECML(AutofillScanner* scanner) { | 123 PhoneField* PhoneField::ParseECML(AutofillScanner* scanner) { |
124 string16 pattern(GetEcmlPattern(kEcmlShipToPhone, kEcmlBillToPhone, '|')); | 124 string16 pattern(GetEcmlPattern(kEcmlShipToPhone, kEcmlBillToPhone, '|')); |
125 | 125 |
126 const AutofillField* field; | 126 const AutofillField* field; |
127 if (ParseText(scanner, pattern, &field)) { | 127 if (ParseText(scanner, pattern, MATCH_NAME | MATCH_LABEL | MATCH_TEXT, |
| 128 &field)) { |
128 PhoneField* phone_field = new PhoneField(); | 129 PhoneField* phone_field = new PhoneField(); |
129 phone_field->parsed_phone_fields_[FIELD_PHONE] = field; | 130 phone_field->parsed_phone_fields_[FIELD_PHONE] = field; |
130 return phone_field; | 131 return phone_field; |
131 } | 132 } |
132 | 133 |
133 return NULL; | 134 return NULL; |
134 } | 135 } |
135 | 136 |
136 bool PhoneField::GetFieldInfo(FieldTypeMap* field_type_map) const { | 137 bool PhoneField::GetFieldInfo(FieldTypeMap* field_type_map) const { |
137 bool ok = true; | 138 bool ok = true; |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 for (size_t i = 0; i < arraysize(phone_field_grammars_); ++i) { | 262 for (size_t i = 0; i < arraysize(phone_field_grammars_); ++i) { |
262 memset(parsed_fields, 0, sizeof(parsed_fields)); | 263 memset(parsed_fields, 0, sizeof(parsed_fields)); |
263 scanner->Rewind(); | 264 scanner->Rewind(); |
264 scanner->SaveCursor(); | 265 scanner->SaveCursor(); |
265 | 266 |
266 // Attempt to parse according to the next grammar. | 267 // Attempt to parse according to the next grammar. |
267 for (; i < arraysize(phone_field_grammars_) && | 268 for (; i < arraysize(phone_field_grammars_) && |
268 phone_field_grammars_[i].regex != REGEX_SEPARATOR; ++i) { | 269 phone_field_grammars_[i].regex != REGEX_SEPARATOR; ++i) { |
269 if (!ParseText(scanner, | 270 if (!ParseText(scanner, |
270 phone_field->GetRegExp(phone_field_grammars_[i].regex), | 271 phone_field->GetRegExp(phone_field_grammars_[i].regex), |
| 272 MATCH_NAME | MATCH_LABEL | MATCH_TEXT, |
271 &parsed_fields[phone_field_grammars_[i].phone_part])) | 273 &parsed_fields[phone_field_grammars_[i].phone_part])) |
272 break; | 274 break; |
273 if (phone_field_grammars_[i].max_size && | 275 if (phone_field_grammars_[i].max_size && |
274 (!parsed_fields[phone_field_grammars_[i].phone_part]->max_length || | 276 (!parsed_fields[phone_field_grammars_[i].phone_part]->max_length || |
275 phone_field_grammars_[i].max_size < | 277 phone_field_grammars_[i].max_size < |
276 parsed_fields[phone_field_grammars_[i].phone_part]->max_length)) { | 278 parsed_fields[phone_field_grammars_[i].phone_part]->max_length)) { |
277 break; | 279 break; |
278 } | 280 } |
279 } | 281 } |
280 | 282 |
(...skipping 22 matching lines...) Expand all Loading... |
303 } | 305 } |
304 | 306 |
305 for (int i = 0; i < FIELD_MAX; ++i) | 307 for (int i = 0; i < FIELD_MAX; ++i) |
306 phone_field->parsed_phone_fields_[i] = parsed_fields[i]; | 308 phone_field->parsed_phone_fields_[i] = parsed_fields[i]; |
307 | 309 |
308 // Look for optional fields. | 310 // Look for optional fields. |
309 | 311 |
310 // Look for a third text box. | 312 // Look for a third text box. |
311 if (!phone_field->parsed_phone_fields_[FIELD_SUFFIX]) { | 313 if (!phone_field->parsed_phone_fields_[FIELD_SUFFIX]) { |
312 if (!ParseText(scanner, phone_field->GetSuffixRegex(), | 314 if (!ParseText(scanner, phone_field->GetSuffixRegex(), |
| 315 MATCH_NAME | MATCH_LABEL | MATCH_TEXT, |
313 &phone_field->parsed_phone_fields_[FIELD_SUFFIX])) { | 316 &phone_field->parsed_phone_fields_[FIELD_SUFFIX])) { |
314 ParseText(scanner, phone_field->GetSuffixSeparatorRegex(), | 317 ParseText(scanner, phone_field->GetSuffixSeparatorRegex(), |
| 318 MATCH_NAME | MATCH_LABEL | MATCH_TEXT, |
315 &phone_field->parsed_phone_fields_[FIELD_SUFFIX]); | 319 &phone_field->parsed_phone_fields_[FIELD_SUFFIX]); |
316 } | 320 } |
317 } | 321 } |
318 | 322 |
319 // Now look for an extension. | 323 // Now look for an extension. |
320 ParseText(scanner, phone_field->GetExtensionRegex(), | 324 ParseText(scanner, phone_field->GetExtensionRegex(), |
| 325 MATCH_NAME | MATCH_LABEL | MATCH_TEXT, |
321 &phone_field->parsed_phone_fields_[FIELD_EXTENSION]); | 326 &phone_field->parsed_phone_fields_[FIELD_EXTENSION]); |
322 | 327 |
323 return true; | 328 return true; |
324 } | 329 } |
325 | 330 |
326 void PhoneField::SetPhoneType(PhoneType phone_type) { | 331 void PhoneField::SetPhoneType(PhoneType phone_type) { |
327 // Field types are different as well, so we create a temporary phone number, | 332 // Field types are different as well, so we create a temporary phone number, |
328 // to get relevant field types. | 333 // to get relevant field types. |
329 if (phone_type == HOME_PHONE) | 334 if (phone_type == HOME_PHONE) |
330 number_.reset(new HomePhoneNumber); | 335 number_.reset(new HomePhoneNumber); |
331 else | 336 else |
332 number_.reset(new FaxNumber); | 337 number_.reset(new FaxNumber); |
333 phone_type_ = phone_type; | 338 phone_type_ = phone_type; |
334 } | 339 } |
335 | 340 |
OLD | NEW |