| Index: chrome/browser/autofill/name_field.cc
|
| diff --git a/chrome/browser/autofill/name_field.cc b/chrome/browser/autofill/name_field.cc
|
| index b4203645d85d2391d5fcc1c6fa01ec4e98fdff78..6057da02fbb52b49f41fbd00740f4a85e6192374 100644
|
| --- a/chrome/browser/autofill/name_field.cc
|
| +++ b/chrome/browser/autofill/name_field.cc
|
| @@ -8,84 +8,13 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/string_util.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/autofill/autofill_regex_constants.h"
|
| #include "chrome/browser/autofill/autofill_scanner.h"
|
| #include "chrome/browser/autofill/autofill_type.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
|
|
| namespace {
|
|
|
| -// The UTF-8 version of these regular expressions are in
|
| -// regular_expressions.txt.
|
| -const char kNameIgnoredRe[] =
|
| - "user.?name|user.?id|nickname|maiden name|title|prefix|suffix"
|
| - // de-DE
|
| - "|vollst\xc3\xa4ndiger.?name"
|
| - // zh-CN
|
| - "|\xe7\x94\xa8\xe6\x88\xb7\xe5\x90\x8d"
|
| - // ko-KR
|
| - "|(\xec\x82\xac\xec\x9a\xa9\xec\x9e\x90.?)?\xec\x95\x84\xec\x9d\xb4\xeb"
|
| - "\x94\x94|\xec\x82\xac\xec\x9a\xa9\xec\x9e\x90.?ID";
|
| -const char kNameRe[] =
|
| - "^name|full.?name|your.?name|customer.?name|firstandlastname|bill.?name"
|
| - "|ship.?name"
|
| - // es
|
| - "|nombre.*y.*apellidos"
|
| - // fr-FR
|
| - "|^nom"
|
| - // ja-JP
|
| - "|\xe3\x81\x8a\xe5\x90\x8d\xe5\x89\x8d|\xe6\xb0\x8f\xe5\x90\x8d"
|
| - // pt-BR, pt-PT
|
| - "|^nome"
|
| - // zh-CN
|
| - "|\xe5\xa7\x93\xe5\x90\x8d"
|
| - // ko-KR
|
| - "|\xec\x84\xb1\xeb\xaa\x85";
|
| -const char kNameSpecificRe[] =
|
| - "^name"
|
| - // fr-FR
|
| - "|^nom"
|
| - // pt-BR, pt-PT
|
| - "|^nome";
|
| -const char kFirstNameRe[] =
|
| - "first.*name|initials|fname|first$"
|
| - // de-DE
|
| - "|vorname"
|
| - // es
|
| - "|nombre"
|
| - // fr-FR
|
| - "|forename|pr\xc3\xa9nom|prenom"
|
| - // ja-JP
|
| - "|\xe5\x90\x8d"
|
| - // pt-BR, pt-PT
|
| - "|nome"
|
| - // ru
|
| - "|\xd0\x98\xd0\xbc\xd1\x8f"
|
| - // ko-KR
|
| - "|\xec\x9d\xb4\xeb\xa6\x84";
|
| -const char kMiddleInitialRe[] = "middle.*initial|m\\.i\\.|mi$|\\bmi\\b";
|
| -const char kMiddleNameRe[] =
|
| - "middle.*name|mname|middle$"
|
| - // es
|
| - "|apellido.?materno|lastlastname";
|
| -const char kLastNameRe[] =
|
| - "last.*name|lname|surname|last$|secondname"
|
| - // de-DE
|
| - "|nachname"
|
| - // es
|
| - "|apellido"
|
| - // fr-FR
|
| - "|famille|^nom"
|
| - // it-IT
|
| - "|cognome"
|
| - // ja-JP
|
| - "|\xe5\xa7\x93"
|
| - // pt-BR, pt-PT
|
| - "|morada|apelidos|surename|sobrenome"
|
| - // ru
|
| - "|\xd0\xa4\xd0\xb0\xd0\xbc\xd0\xb8\xd0\xbb\xd0\xb8\xd1\x8f"
|
| - // ko-KR
|
| - "|\xec\x84\xb1[^\xeb\xaa\x85]?";
|
| -
|
| // A form field that can parse a full name field.
|
| class FullNameField : public NameField {
|
| public:
|
| @@ -146,7 +75,8 @@ bool NameField::ClassifyField(FieldTypeMap* map) const {
|
| FullNameField* FullNameField::Parse(AutofillScanner* scanner) {
|
| // Exclude e.g. "username" or "nickname" fields.
|
| scanner->SaveCursor();
|
| - bool should_ignore = ParseField(scanner, UTF8ToUTF16(kNameIgnoredRe), NULL);
|
| + bool should_ignore = ParseField(scanner,
|
| + UTF8ToUTF16(autofill::kNameIgnoredRe), NULL);
|
| scanner->Rewind();
|
| if (should_ignore)
|
| return NULL;
|
| @@ -155,7 +85,7 @@ FullNameField* FullNameField::Parse(AutofillScanner* scanner) {
|
| // for example, Travelocity_Edit travel profile.html contains a field
|
| // "Travel Profile Name".
|
| const AutofillField* field = NULL;
|
| - if (ParseField(scanner, UTF8ToUTF16(kNameRe), &field))
|
| + if (ParseField(scanner, UTF8ToUTF16(autofill::kNameRe), &field))
|
| return new FullNameField(field);
|
|
|
| return NULL;
|
| @@ -178,7 +108,7 @@ FirstLastNameField* FirstLastNameField::ParseSpecificName(
|
|
|
| const AutofillField* next;
|
| if (ParseField(scanner,
|
| - UTF8ToUTF16(kNameSpecificRe), &v->first_name_) &&
|
| + UTF8ToUTF16(autofill::kNameSpecificRe), &v->first_name_) &&
|
| ParseEmptyLabel(scanner, &next)) {
|
| if (ParseEmptyLabel(scanner, &v->last_name_)) {
|
| // There are three name fields; assume that the middle one is a
|
| @@ -214,13 +144,14 @@ FirstLastNameField* FirstLastNameField::ParseComponentNames(
|
| // Allow name fields to appear in any order.
|
| while (!scanner->IsEnd()) {
|
| // Skip over any unrelated fields, e.g. "username" or "nickname".
|
| - if (ParseFieldSpecifics(scanner, UTF8ToUTF16(kNameIgnoredRe),
|
| + if (ParseFieldSpecifics(scanner, UTF8ToUTF16(autofill::kNameIgnoredRe),
|
| MATCH_DEFAULT | MATCH_SELECT, NULL)) {
|
| continue;
|
| }
|
|
|
| if (!v->first_name_ &&
|
| - ParseField(scanner, UTF8ToUTF16(kFirstNameRe), &v->first_name_)) {
|
| + ParseField(scanner, UTF8ToUTF16(autofill::kFirstNameRe),
|
| + &v->first_name_)) {
|
| continue;
|
| }
|
|
|
| @@ -230,18 +161,21 @@ FirstLastNameField* FirstLastNameField::ParseComponentNames(
|
| // "txtmiddlename"); such a field probably actually represents a
|
| // middle initial.
|
| if (!v->middle_name_ &&
|
| - ParseField(scanner, UTF8ToUTF16(kMiddleInitialRe), &v->middle_name_)) {
|
| + ParseField(scanner, UTF8ToUTF16(autofill::kMiddleInitialRe),
|
| + &v->middle_name_)) {
|
| v->middle_initial_ = true;
|
| continue;
|
| }
|
|
|
| if (!v->middle_name_ &&
|
| - ParseField(scanner, UTF8ToUTF16(kMiddleNameRe), &v->middle_name_)) {
|
| + ParseField(scanner, UTF8ToUTF16(autofill::kMiddleNameRe),
|
| + &v->middle_name_)) {
|
| continue;
|
| }
|
|
|
| if (!v->last_name_ &&
|
| - ParseField(scanner, UTF8ToUTF16(kLastNameRe), &v->last_name_)) {
|
| + ParseField(scanner, UTF8ToUTF16(autofill::kLastNameRe),
|
| + &v->last_name_)) {
|
| continue;
|
| }
|
|
|
|
|