| 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 |