Chromium Code Reviews| Index: chrome/browser/autofill/address_field.cc |
| diff --git a/chrome/browser/autofill/address_field.cc b/chrome/browser/autofill/address_field.cc |
| index 4624fa515ce2e8279e9cb88e09c9506e71942716..437d413ebf3c1b6caf7e8c7d68acdc6a5a23751f 100644 |
| --- a/chrome/browser/autofill/address_field.cc |
| +++ b/chrome/browser/autofill/address_field.cc |
| @@ -13,6 +13,8 @@ |
| #include "base/utf_string_conversions.h" |
| #include "chrome/browser/autofill/autofill_field.h" |
| #include "chrome/browser/autofill/autofill_scanner.h" |
| +#include "chrome/browser/autofill/email_field.h" |
| +#include "chrome/browser/autofill/phone_field.h" |
| #include "grit/autofill_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| @@ -78,6 +80,22 @@ AddressField* AddressField::Parse(AutofillScanner* scanner, bool is_ecml) { |
| // Allow address fields to appear in any order. |
| while (!scanner->IsEnd()) { |
| + // Every loop, we have to parse email and phone, and if we find it, we |
| + // break the loop even while continuing address. Because we want to give |
| + // email and phone more priority than address. We have to rewind |scanner| |
| + // position after the email and phone parsing. |
| + size_t cursor_position = scanner->SaveCursor(); |
| + bool is_email = EmailField::Parse(scanner, is_ecml); |
| + scanner->RewindTo(cursor_position); |
| + if (is_email) |
| + break; |
| + |
| + cursor_position = scanner->SaveCursor(); |
| + bool is_phone = PhoneField::Parse(scanner, is_ecml); |
| + scanner->RewindTo(cursor_position); |
| + if (is_phone) |
| + break; |
|
Ilya Sherman
2011/05/14 06:59:12
David and I discussed this a bit offline today --
Ilya Sherman
2011/05/14 07:01:33
Whoops, didn't mean to send this comment out -- wa
honten.org
2011/05/14 07:41:20
I see, it might be better idea.
But, at first, I
|
| + |
| if (ParseCompany(scanner, is_ecml, address_field.get()) || |
| ParseAddressLines(scanner, is_ecml, address_field.get()) || |
| ParseCity(scanner, is_ecml, address_field.get()) || |
| @@ -246,7 +264,8 @@ bool AddressField::ParseCountry(AutofillScanner* scanner, |
| else |
| pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_COUNTRY_RE); |
| - return ParseText(scanner, pattern, &address_field->country_); |
| + return ParseText(scanner, FormField::Pattern(pattern, true), |
| + &address_field->country_); |
| } |
| // static |
| @@ -315,7 +334,8 @@ bool AddressField::ParseCity(AutofillScanner* scanner, |
| else |
| pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_CITY_RE); |
| - return ParseText(scanner, pattern, &address_field->city_); |
| + return ParseText(scanner, FormField::Pattern(pattern, true), |
| + &address_field->city_); |
| } |
| // static |
| @@ -331,7 +351,8 @@ bool AddressField::ParseState(AutofillScanner* scanner, |
| else |
| pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_STATE_RE); |
| - return ParseText(scanner, pattern, &address_field->state_); |
| + return ParseText(scanner, FormField::Pattern(pattern, true), |
| + &address_field->state_); |
| } |
| AddressType AddressField::AddressTypeFromText(const string16 &text) { |