summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-05 20:11:02 +0000
committerdhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-05 20:11:02 +0000
commit21861f27de14a1af8dae37a3bba5e98c3ed59e6c (patch)
tree2bee8fdaed60665c768317459c96159abfea7283
parentaa742b4f9495fc201d68ccd29f0f6c4bbbef64e9 (diff)
downloadchromium_src-21861f27de14a1af8dae37a3bba5e98c3ed59e6c.zip
chromium_src-21861f27de14a1af8dae37a3bba5e98c3ed59e6c.tar.gz
chromium_src-21861f27de14a1af8dae37a3bba5e98c3ed59e6c.tar.bz2
Autofill heuristics regular expressions should be stored in external data files.
This change moves the Autofill heuristics regular expressions out to a new autofill_resources.grd file. This grd file is not meant to be localized. Eventually it will contain the locale-specific regular expressions as well as the English versions. This CL, however, just moves the English versions out of source. BUG=55787 TEST=FormStructureBrowserTest.HTMLFiles Review URL: http://codereview.chromium.org/6026010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70535 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/autofill/address_field.cc62
-rw-r--r--chrome/browser/autofill/autofill_resources.grd129
-rw-r--r--chrome/browser/autofill/credit_card_field.cc19
-rw-r--r--chrome/browser/autofill/form_field.cc4
-rw-r--r--chrome/browser/autofill/form_structure_browsertest.cc26
-rw-r--r--chrome/browser/autofill/name_field.cc20
-rw-r--r--chrome/browser/autofill/phone_field.cc22
-rw-r--r--chrome/chrome.gyp2
-rw-r--r--chrome/chrome_dll.gypi3
-rw-r--r--chrome/chrome_tests.gypi10
-rw-r--r--tools/grit/resource_ids4
11 files changed, 233 insertions, 68 deletions
diff --git a/chrome/browser/autofill/address_field.cc b/chrome/browser/autofill/address_field.cc
index ea7dea7..b2bef04 100644
--- a/chrome/browser/autofill/address_field.cc
+++ b/chrome/browser/autofill/address_field.cc
@@ -4,12 +4,14 @@
#include "chrome/browser/autofill/address_field.h"
+#include "app/l10n_util.h"
#include "base/logging.h"
#include "base/scoped_ptr.h"
#include "base/string16.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autofill/autofill_field.h"
+#include "grit/autofill_resources.h"
bool AddressField::GetFieldInfo(FieldTypeMap* field_type_map) const {
AutoFillFieldType address_company;
@@ -90,6 +92,11 @@ AddressField* AddressField::Parse(
// it out.
address_field->is_ecml_ = is_ecml;
+ string16 attention_ignored =
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_ATTENTION_IGNORED_RE);
+ string16 region_ignored =
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_REGION_IGNORED_RE);
+
// Allow address fields to appear in any order.
while (true) {
if (ParseCompany(&q, is_ecml, address_field.get()) ||
@@ -99,8 +106,8 @@ AddressField* AddressField::Parse(
ParseZipCode(&q, is_ecml, address_field.get()) ||
ParseCountry(&q, is_ecml, address_field.get())) {
continue;
- } else if (ParseText(&q, ASCIIToUTF16("attention|attn.")) ||
- ParseText(&q, ASCIIToUTF16("province|region|other"))) {
+ } else if (ParseText(&q, attention_ignored) ||
+ ParseText(&q, region_ignored)) {
// We ignore the following:
// * Attention.
// * Province/Region/Other.
@@ -173,7 +180,7 @@ bool AddressField::ParseCompany(
pattern = GetEcmlPattern(kEcmlShipToCompanyName,
kEcmlBillToCompanyName, '|');
else
- pattern = ASCIIToUTF16("company|business name");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_COMPANY_RE);
if (!ParseText(iter, pattern, &address_field->company_))
return false;
@@ -198,14 +205,13 @@ bool AddressField::ParseAddressLines(
string16 pattern;
if (is_ecml) {
- pattern = GetEcmlPattern(kEcmlShipToAddress1,
- kEcmlBillToAddress1, '|');
+ pattern = GetEcmlPattern(kEcmlShipToAddress1, kEcmlBillToAddress1, '|');
if (!ParseText(iter, pattern, &address_field->address1_))
return false;
} else {
- pattern =
- ASCIIToUTF16("address.?line|address1|addr1|street");
- string16 label_pattern = ASCIIToUTF16("address");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_RE);
+ string16 label_pattern =
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_LABEL_RE);
if (!ParseText(iter, pattern, &address_field->address1_))
if (!ParseLabelText(iter, label_pattern, &address_field->address1_))
@@ -216,13 +222,13 @@ bool AddressField::ParseAddressLines(
// Some pages have 3 address lines (eg SharperImageModifyAccount.html)
// Some pages even have 4 address lines (e.g. uk/ShoesDirect2.html)!
if (is_ecml) {
- pattern = GetEcmlPattern(kEcmlShipToAddress2,
- kEcmlBillToAddress2, '|');
+ pattern = GetEcmlPattern(kEcmlShipToAddress2, kEcmlBillToAddress2, '|');
if (!ParseEmptyText(iter, &address_field->address2_))
ParseText(iter, pattern, &address_field->address2_);
} else {
- pattern = ASCIIToUTF16("address.?line2|address2|addr2|street|suite|unit");
- string16 label_pattern = ASCIIToUTF16("address");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_2_RE);
+ string16 label_pattern =
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_LABEL_RE);
if (!ParseEmptyText(iter, &address_field->address2_))
if (!ParseText(iter, pattern, &address_field->address2_))
ParseLabelText(iter, label_pattern, &address_field->address2_);
@@ -231,11 +237,10 @@ bool AddressField::ParseAddressLines(
// Try for a third line, which we will promptly discard.
if (address_field->address2_ != NULL) {
if (is_ecml) {
- pattern = GetEcmlPattern(kEcmlShipToAddress3,
- kEcmlBillToAddress3, '|');
+ pattern = GetEcmlPattern(kEcmlShipToAddress3, kEcmlBillToAddress3, '|');
ParseText(iter, pattern);
} else {
- pattern = ASCIIToUTF16("address.?line3|address3|addr3|street|line3");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_3_RE);
if (!ParseEmptyText(iter, NULL))
ParseText(iter, pattern, NULL);
}
@@ -258,7 +263,7 @@ bool AddressField::ParseCountry(
if (is_ecml)
pattern = GetEcmlPattern(kEcmlShipToCountry, kEcmlBillToCountry, '|');
else
- pattern = ASCIIToUTF16("country|location");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_COUNTRY_RE);
if (!ParseText(iter, pattern, &address_field->country_))
return false;
@@ -286,10 +291,9 @@ bool AddressField::ParseZipCode(
string16 pattern;
if (is_ecml) {
- pattern = GetEcmlPattern(kEcmlShipToPostalCode,
- kEcmlBillToPostalCode, '|');
+ pattern = GetEcmlPattern(kEcmlShipToPostalCode, kEcmlBillToPostalCode, '|');
} else {
- pattern = ASCIIToUTF16("zip|postal|post code|pcode|^1z$");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_ZIP_CODE_RE);
}
AddressType tempType;
@@ -314,7 +318,9 @@ bool AddressField::ParseZipCode(
if (!is_ecml) {
// Look for a zip+4, whose field name will also often contain
// the substring "zip".
- ParseText(iter, ASCIIToUTF16("zip|^-$"), &address_field->zip4_);
+ ParseText(iter,
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_ZIP_4_RE),
+ &address_field->zip4_);
}
return true;
@@ -333,7 +339,7 @@ bool AddressField::ParseCity(
if (is_ecml)
pattern = GetEcmlPattern(kEcmlShipToCity, kEcmlBillToCity, '|');
else
- pattern = ASCIIToUTF16("city|town");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_CITY_RE);
if (!ParseText(iter, pattern, &address_field->city_))
return false;
@@ -352,7 +358,7 @@ bool AddressField::ParseState(
if (is_ecml)
pattern = GetEcmlPattern(kEcmlShipToStateProv, kEcmlBillToStateProv, '|');
else
- pattern = ASCIIToUTF16("state|county");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_STATE_RE);
if (!ParseText(iter, pattern, &address_field->state_))
return false;
@@ -361,8 +367,10 @@ bool AddressField::ParseState(
}
AddressType AddressField::AddressTypeFromText(const string16 &text) {
- if (text.find(ASCIIToUTF16("same as")) != string16::npos ||
- text.find(ASCIIToUTF16("use my")) != string16::npos)
+ if (text.find(l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_TYPE_SAME_AS_RE))
+ != string16::npos ||
+ text.find(l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_TYPE_USE_MY_RE))
+ != string16::npos)
// This text could be a checkbox label such as "same as my billing
// address" or "use my shipping address".
// ++ It would help if we generally skipped all text that appears
@@ -372,8 +380,10 @@ AddressType AddressField::AddressTypeFromText(const string16 &text) {
// Not all pages say "billing address" and "shipping address" explicitly;
// for example, Craft Catalog1.html has "Bill-to Address" and
// "Ship-to Address".
- size_t bill = text.rfind(ASCIIToUTF16("bill"));
- size_t ship = text.rfind(ASCIIToUTF16("ship"));
+ size_t bill = text.rfind(
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_BILLING_DESIGNATOR_RE));
+ size_t ship = text.rfind(
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_SHIPPING_DESIGNATOR_RE));
if (bill == string16::npos && ship == string16::npos)
return kGenericAddress;
diff --git a/chrome/browser/autofill/autofill_resources.grd b/chrome/browser/autofill/autofill_resources.grd
new file mode 100644
index 0000000..7fce455
--- /dev/null
+++ b/chrome/browser/autofill/autofill_resources.grd
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0" current_release="1">
+ <outputs>
+ <output filename="grit/autofill_resources.h" type="rc_header">
+ <emit emit_type='prepend'></emit>
+ </output>
+ <output filename="autofill_resources.pak" type="data_package" />
+ <output filename="autofill_resources.rc" type="rc_all" />
+ </outputs>
+ <release seq="1" allow_pseudo="false">
+ <messages fallback_to_english="true">
+ <message name="IDS_AUTOFILL_ADDRESS_LINE_1_RE">
+ address.?line|address1|addr1|street
+ </message>
+ <message name="IDS_AUTOFILL_ADDRESS_LINE_1_LABEL_RE">
+ address
+ </message>
+ <message name="IDS_AUTOFILL_ADDRESS_LINE_2_RE">
+ address.?line2|address2|addr2|street|suite|unit
+ </message>
+ <message name="IDS_AUTOFILL_ADDRESS_LINE_2_LABEL_RE">
+ address
+ </message>
+ <message name="IDS_AUTOFILL_ADDRESS_LINE_3_RE">
+ address.?line3|address3|addr3|street|line3
+ </message>
+ <message name="IDS_AUTOFILL_COMPANY_RE">
+ company|business name
+ </message>
+ <message name="IDS_AUTOFILL_ATTENTION_IGNORED_RE">
+ attention|attn.
+ </message>
+ <message name="IDS_AUTOFILL_REGION_IGNORED_RE">
+ province|region|other
+ </message>
+ <message name="IDS_AUTOFILL_COUNTRY_RE">
+ country|location
+ </message>
+ <message name="IDS_AUTOFILL_ZIP_CODE_RE">
+ zip|postal|post code|pcode|^1z$
+ </message>
+ <message name="IDS_AUTOFILL_ZIP_4_RE">
+ zip|^-$
+ </message>
+ <message name="IDS_AUTOFILL_CITY_RE">
+ city|town
+ </message>
+ <message name="IDS_AUTOFILL_STATE_RE">
+ state|county
+ </message>
+ <message name="IDS_AUTOFILL_ADDRESS_TYPE_SAME_AS_RE">
+ same as
+ </message>
+ <message name="IDS_AUTOFILL_ADDRESS_TYPE_USE_MY_RE">
+ use my
+ </message>
+ <message name="IDS_AUTOFILL_BILLING_DESIGNATOR_RE">
+ bill
+ </message>
+ <message name="IDS_AUTOFILL_SHIPPING_DESIGNATOR_RE">
+ ship
+ </message>
+ <message name="IDS_AUTOFILL_EMAIL_RE">
+ email|e-mail
+ </message>
+ <message name="IDS_AUTOFILL_NAME_ON_CARD_RE">
+ card holder|name on card|nameoncard
+ </message>
+ <message name="IDS_AUTOFILL_NAME_ON_CARD_CONTEXTUAL_RE">
+ name
+ </message>
+ <message name="IDS_AUTOFILL_CARD_NUMBER_RE">
+ number|card #|card no.|card_number|card number
+ </message>
+ <message name="IDS_AUTOFILL_CARD_CVC_RE">
+ verification|card identification|cvn|security code|cvv code|cvc
+ </message>
+ <message name="IDS_AUTOFILL_EXPIRATION_MONTH_RE">
+ expir|exp.*month|exp date|ccmonth
+ </message>
+ <message name="IDS_AUTOFILL_EXPIRATION_DATE_RE">
+ |exp|^/|ccyear|year
+ </message>
+ <message name="IDS_AUTOFILL_CARD_IGNORED_RE">
+ ^card
+ </message>
+ <message name="IDS_AUTOFILL_USERNAME_RE">
+ username
+ </message>
+ <message name="IDS_AUTOFILL_NAME_RE">
+ ^name|full *name|your name|customer name
+ </message>
+ <message name="IDS_AUTOFILL_NAME_SPECIFIC_RE">
+ ^name
+ </message>
+ <message name="IDS_AUTOFILL_FIRST_NAME_RE">
+ first *name|first_name|initials|fname|first$
+ </message>
+ <message name="IDS_AUTOFILL_MIDDLE_INITIAL_RE">
+ middle *initial|middle_initial|m\.i\.|mi$
+ </message>
+ <message name="IDS_AUTOFILL_MIDDLE_NAME_RE">
+ middle *name|middle_name|mname|middle$
+ </message>
+ <message name="IDS_AUTOFILL_LAST_NAME_RE">
+ last *name|last_name|lname|surname|last$
+ </message>
+ <message name="IDS_AUTOFILL_PHONE_RE">
+ phone
+ </message>
+ <message name="IDS_AUTOFILL_AREA_CODE_RE">
+ area code
+ </message>
+ <message name="IDS_AUTOFILL_FAX_RE">
+ fax
+ </message>
+ <message name="IDS_AUTOFILL_PHONE_PREFIX_RE">
+ ^-$|\)$|prefix
+ </message>
+ <message name="IDS_AUTOFILL_PHONE_SUFFIX_RE">
+ ^-$|suffix
+ </message>
+ <message name="IDS_AUTOFILL_PHONE_EXTENSION_RE">
+ ext
+ </message>
+ </messages>
+ </release>
+</grit>
+
diff --git a/chrome/browser/autofill/credit_card_field.cc b/chrome/browser/autofill/credit_card_field.cc
index f8b4c5e..3a51b6f 100644
--- a/chrome/browser/autofill/credit_card_field.cc
+++ b/chrome/browser/autofill/credit_card_field.cc
@@ -4,10 +4,12 @@
#include "chrome/browser/autofill/credit_card_field.h"
+#include "app/l10n_util.h"
#include "base/scoped_ptr.h"
#include "base/string16.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autofill/autofill_field.h"
+#include "grit/autofill_resources.h"
bool CreditCardField::GetFieldInfo(FieldTypeMap* field_type_map) const {
bool ok = Add(field_type_map, number_, AutoFillType(CREDIT_CARD_NUMBER));
@@ -64,9 +66,11 @@ CreditCardField* CreditCardField::Parse(
} else {
if (fields == 0 || credit_card_field->expiration_month_) {
// at beginning or end
- name_pattern = ASCIIToUTF16("card holder|name on card|nameoncard");
+ name_pattern = l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_NAME_ON_CARD_RE);
} else {
- name_pattern = ASCIIToUTF16("name");
+ name_pattern = l10n_util::GetStringUTF16(
+ IDS_AUTOFILL_NAME_ON_CARD_CONTEXTUAL_RE);
}
}
@@ -96,8 +100,7 @@ CreditCardField* CreditCardField::Parse(
if (is_ecml) {
pattern = GetEcmlPattern(kEcmlCardVerification);
} else {
- pattern = ASCIIToUTF16("verification|card identification|cvn|"
- "security code|cvv code|cvc");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_CARD_CVC_RE);
}
if (credit_card_field->verification_ == NULL &&
@@ -109,7 +112,7 @@ CreditCardField* CreditCardField::Parse(
if (is_ecml)
pattern = GetEcmlPattern(kEcmlCardNumber);
else
- pattern = ASCIIToUTF16("number|card #|card no.|card_number|card number");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_CARD_NUMBER_RE);
if (credit_card_field->number_ == NULL && ParseText(&q, pattern,
&credit_card_field->number_))
@@ -130,7 +133,7 @@ CreditCardField* CreditCardField::Parse(
if (is_ecml)
pattern = GetEcmlPattern(kEcmlCardExpireMonth);
else
- pattern = ASCIIToUTF16("expir|exp.*month|exp date|ccmonth");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_EXPIRATION_MONTH_RE);
if ((!credit_card_field->expiration_month_ ||
credit_card_field->expiration_month_->IsEmpty()) &&
@@ -138,7 +141,7 @@ CreditCardField* CreditCardField::Parse(
if (is_ecml)
pattern = GetEcmlPattern(kEcmlCardExpireYear);
else
- pattern = ASCIIToUTF16("|exp|^/|ccyear|year");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_EXPIRATION_DATE_RE);
if (!ParseText(&q, pattern, &credit_card_field->expiration_year_))
return NULL;
@@ -154,7 +157,7 @@ CreditCardField* CreditCardField::Parse(
// We also ignore any other fields within a credit card block that
// start with "card", under the assumption that they are related to
// the credit card section being processed but are uninteresting to us.
- if (ParseText(&q, ASCIIToUTF16("^card")))
+ if (ParseText(&q, l10n_util::GetStringUTF16(IDS_AUTOFILL_CARD_IGNORED_RE)))
continue;
break;
diff --git a/chrome/browser/autofill/form_field.cc b/chrome/browser/autofill/form_field.cc
index 6bf3e24..545ce1b 100644
--- a/chrome/browser/autofill/form_field.cc
+++ b/chrome/browser/autofill/form_field.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/autofill/form_field.h"
+#include "app/l10n_util.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autofill/address_field.h"
@@ -14,6 +15,7 @@
#include "chrome/browser/autofill/phone_field.h"
#include "third_party/WebKit/WebKit/chromium/public/WebRegularExpression.h"
#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
+#include "grit/autofill_resources.h"
// Field names from the ECML specification; see RFC 3106. We've
// made these names lowercase since we convert labels and field names to
@@ -89,7 +91,7 @@ class EmailField : public FormField {
if (is_ecml) {
pattern = GetEcmlPattern(kEcmlShipToEmail, kEcmlBillToEmail, '|');
} else {
- pattern = ASCIIToUTF16("email|e-mail");
+ pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_EMAIL_RE);
}
AutoFillField* field;
diff --git a/chrome/browser/autofill/form_structure_browsertest.cc b/chrome/browser/autofill/form_structure_browsertest.cc
index ae38f7d..f6bda60 100644
--- a/chrome/browser/autofill/form_structure_browsertest.cc
+++ b/chrome/browser/autofill/form_structure_browsertest.cc
@@ -47,19 +47,13 @@ const std::string ConvertToURLFormat(const std::string& html) {
return std::string("data:text/html;charset=utf-8,") + html;
}
-// Compare |output_file_source| with |form_string|. Returns true when they are
-// identical.
-bool CompareText(const std::string& output_file_source,
- const std::string& form_string) {
- std::string output_file = output_file_source;
- std::string form = form_string;
-
- ReplaceSubstringsAfterOffset(&output_file, 0, "\r\n", " ");
- ReplaceSubstringsAfterOffset(&output_file, 0, "\r", " ");
- ReplaceSubstringsAfterOffset(&output_file, 0, "\n", " ");
- ReplaceSubstringsAfterOffset(&form, 0, "\n", " ");
-
- return (output_file == form);
+// Convert strings with platform end-of-line characters with spaces.
+const std::string NormalizeText(const std::string& text) {
+ std::string normalized = text;
+ ReplaceSubstringsAfterOffset(&normalized, 0, "\r\n", " ");
+ ReplaceSubstringsAfterOffset(&normalized, 0, "\r", " ");
+ ReplaceSubstringsAfterOffset(&normalized, 0, "\n", " ");
+ return normalized;
}
} // namespace
@@ -253,9 +247,9 @@ IN_PROC_BROWSER_TEST_F(FormStructureBrowserTest, HTMLFiles) {
std::string output_file_source;
if (file_util::ReadFileToString(output_file_path, &output_file_source)) {
- ASSERT_TRUE(CompareText(
- output_file_source,
- FormStructureBrowserTest::FormStructuresToString(forms)));
+ ASSERT_EQ(NormalizeText(output_file_source),
+ NormalizeText(
+ FormStructureBrowserTest::FormStructuresToString(forms)));
} else {
ASSERT_TRUE(WriteFile(
diff --git a/chrome/browser/autofill/name_field.cc b/chrome/browser/autofill/name_field.cc
index 69a7b43..8a83ff7 100644
--- a/chrome/browser/autofill/name_field.cc
+++ b/chrome/browser/autofill/name_field.cc
@@ -4,11 +4,13 @@
#include "chrome/browser/autofill/name_field.h"
+#include "app/l10n_util.h"
#include "base/logging.h"
#include "base/scoped_ptr.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autofill/autofill_type.h"
+#include "grit/autofill_resources.h"
NameField* NameField::Parse(std::vector<AutoFillField*>::const_iterator* iter,
bool is_ecml) {
@@ -30,14 +32,13 @@ FullNameField* FullNameField::Parse(
// Exclude labels containing the string "username", which typically
// denotes a login ID rather than the user's actual name.
AutoFillField* field = **iter;
- if (Match(field, ASCIIToUTF16("username"), false))
+ if (Match(field, l10n_util::GetStringUTF16(IDS_AUTOFILL_USERNAME_RE), false))
return NULL;
// Searching for any label containing the word "name" is too general;
// for example, Travelocity_Edit travel profile.html contains a field
// "Travel Profile Name".
- const string16 name_match =
- ASCIIToUTF16("^name|full *name|your name|customer name");
+ const string16 name_match = l10n_util::GetStringUTF16(IDS_AUTOFILL_NAME_RE);
if (ParseText(iter, name_match, &field))
return new FullNameField(field);
@@ -56,7 +57,9 @@ FirstLastNameField* FirstLastNameField::Parse1(
std::vector<AutoFillField*>::const_iterator q = *iter;
AutoFillField* next;
- if (ParseText(&q, ASCIIToUTF16("^name"), &v->first_name_) &&
+ if (ParseText(&q,
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_NAME_SPECIFIC_RE),
+ &v->first_name_) &&
ParseEmptyText(&q, &next)) {
if (ParseEmptyText(&q, &v->last_name_)) {
// There are three name fields; assume that the middle one is a
@@ -87,8 +90,7 @@ FirstLastNameField* FirstLastNameField::Parse2(
// so we match "initials" here (and just fill in a first name there,
// American-style).
// The ".*first$" matches fields ending in "first" (example in sample8.html).
- string16 match =
- ASCIIToUTF16("first *name|first_name|initials|fname|first$");
+ string16 match = l10n_util::GetStringUTF16(IDS_AUTOFILL_FIRST_NAME_RE);
if (!ParseText(&q, match, &v->first_name_))
return NULL;
@@ -97,16 +99,16 @@ FirstLastNameField* FirstLastNameField::Parse2(
// as both (the label text is "MI" and the element name is
// "txtmiddlename"); such a field probably actually represents a
// middle initial.
- match = ASCIIToUTF16("middle *initial|middle_initial|m\\.i\\.|mi$");
+ match = l10n_util::GetStringUTF16(IDS_AUTOFILL_MIDDLE_INITIAL_RE);
if (ParseText(&q, match, &v->middle_name_)) {
v->middle_initial_ = true;
} else {
- match = ASCIIToUTF16("middle *name|middle_name|mname|middle$");
+ match = l10n_util::GetStringUTF16(IDS_AUTOFILL_MIDDLE_NAME_RE);
ParseText(&q, match, &v->middle_name_);
}
// The ".*last$" matches fields ending in "last" (example in sample8.html).
- match = ASCIIToUTF16("last *name|last_name|lname|surname|last$");
+ match = l10n_util::GetStringUTF16(IDS_AUTOFILL_LAST_NAME_RE);
if (!ParseText(&q, match, &v->last_name_))
return NULL;
diff --git a/chrome/browser/autofill/phone_field.cc b/chrome/browser/autofill/phone_field.cc
index e063587c..083a8dc 100644
--- a/chrome/browser/autofill/phone_field.cc
+++ b/chrome/browser/autofill/phone_field.cc
@@ -4,12 +4,14 @@
#include "chrome/browser/autofill/phone_field.h"
+#include "app/l10n_util.h"
#include "base/logging.h"
#include "base/scoped_ptr.h"
#include "base/string16.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autofill/autofill_field.h"
+#include "grit/autofill_resources.h"
// static
PhoneField* PhoneField::Parse(std::vector<AutoFillField*>::const_iterator* iter,
@@ -30,13 +32,15 @@ PhoneField* PhoneField::Parse(std::vector<AutoFillField*>::const_iterator* iter,
// Some pages, such as BloomingdalesShipping.html, have a field labeled
// "Area Code and Phone"; we want to parse this as a phone number field so
// we look for "phone" before we look for "area code".
- if (ParseText(&q, ASCIIToUTF16("phone"), &phone)) {
+ if (ParseText(&q, l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_RE), &phone)) {
area_code = false;
} else {
- if (!ParseText(&q, ASCIIToUTF16("area code"), &phone))
+ if (!ParseText(&q,
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_AREA_CODE_RE),
+ &phone))
return NULL;
area_code = true;
- ParseText(&q, ASCIIToUTF16("phone"), &phone2);
+ ParseText(&q, l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_RE), &phone2);
}
// Sometimes phone number fields are separated by "-" (e.g. test page
@@ -48,11 +52,15 @@ PhoneField* PhoneField::Parse(std::vector<AutoFillField*>::const_iterator* iter,
// uk/Furniture123-1.html) have several phone numbers in succession and we
// don't want those to be parsed as components of a single phone number.
if (phone2 == NULL)
- ParseText(&q, ASCIIToUTF16("^-$|\\)$|prefix"), &phone2);
+ ParseText(&q,
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_PREFIX_RE),
+ &phone2);
// Look for a third text box.
if (phone2)
- ParseText(&q, ASCIIToUTF16("^-$|suffix"), &phone3);
+ ParseText(&q,
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_SUFFIX_RE),
+ &phone3);
// Now we have one, two, or three phone number text fields. Package them
// up into a PhoneField object.
@@ -73,7 +81,9 @@ PhoneField* PhoneField::Parse(std::vector<AutoFillField*>::const_iterator* iter,
}
// Now look for an extension.
- ParseText(&q, ASCIIToUTF16("ext"), &phone_field->extension_);
+ ParseText(&q,
+ l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_EXTENSION_RE),
+ &phone_field->extension_);
*iter = q;
return phone_field.release();
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index 2cd3079..5d294f4 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -51,6 +51,7 @@
],
'chrome_resources_grds': [
# Data resources.
+ 'browser/autofill/autofill_resources.grd',
'browser/browser_resources.grd',
'common/common_resources.grd',
'renderer/renderer_resources.grd',
@@ -1862,6 +1863,7 @@
'action_name': 'repack_chrome',
'variables': {
'pak_inputs': [
+ '<(grit_out_dir)/autofill_resources.pak',
'<(grit_out_dir)/browser_resources.pak',
'<(grit_out_dir)/common_resources.pak',
'<(grit_out_dir)/default_plugin_resources/default_plugin_resources.pak',
diff --git a/chrome/chrome_dll.gypi b/chrome/chrome_dll.gypi
index f1f821c..f3e5ebb 100644
--- a/chrome/chrome_dll.gypi
+++ b/chrome/chrome_dll.gypi
@@ -111,6 +111,7 @@
# but that causes errors in other targets when
# resulting .res files get referenced multiple times.
'<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome/autofill_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/browser_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/renderer_resources.rc',
@@ -326,6 +327,7 @@
'action_name': 'repack_chrome',
'variables': {
'pak_inputs': [
+ '<(grit_out_dir)/autofill_resources.pak',
'<(grit_out_dir)/browser_resources.pak',
'<(grit_out_dir)/common_resources.pak',
'<(grit_out_dir)/default_plugin_resources/default_plugin_resources.pak',
@@ -584,6 +586,7 @@
# but that causes errors in other targets when
# resulting .res files get referenced multiple times.
'<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome/autofill_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc',
# TODO(sgk): left-over from pre-gyp build, figure out
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index af458f6..4d7f863 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -431,6 +431,7 @@
# but that causes errors in other targets when
# resulting .res files get referenced multiple times.
'<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome/autofill_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/browser_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/renderer_resources.rc',
@@ -1893,6 +1894,7 @@
# but that causes errors in other targets when
# resulting .res files get referenced multiple times.
'<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome/autofill_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/browser_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/renderer_resources.rc',
@@ -2228,6 +2230,7 @@
['OS=="win"', {
'sources': [
'<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome/autofill_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/browser_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome_dll_version/chrome_dll_version.rc',
@@ -2376,9 +2379,10 @@
],
'sources': [
'<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome/autofill_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/browser_resources.rc',
- '<(SHARED_INTERMEDIATE_DIR)/chrome_dll_version/chrome_dll_version.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome_dll_version/chrome_dll_version.rc',
'<(SHARED_INTERMEDIATE_DIR)/net/net_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/renderer_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/theme_resources.rc',
@@ -2944,9 +2948,10 @@
['OS=="win"', {
'sources': [
'<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome/autofill_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/browser_resources.rc',
- '<(SHARED_INTERMEDIATE_DIR)/chrome_dll_version/chrome_dll_version.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome_dll_version/chrome_dll_version.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/theme_resources.rc',
],
'include_dirs': [
@@ -3035,6 +3040,7 @@
'app/chrome_dll_resource.h',
'app/chrome_dll_version.rc.version',
'<(SHARED_INTERMEDIATE_DIR)/app/app_resources/app_resources.rc',
+ '<(SHARED_INTERMEDIATE_DIR)/chrome/autofill_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/browser_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/common_resources.rc',
'<(SHARED_INTERMEDIATE_DIR)/chrome/renderer_resources.rc',
diff --git a/tools/grit/resource_ids b/tools/grit/resource_ids
index a8d06f6..219e058 100644
--- a/tools/grit/resource_ids
+++ b/tools/grit/resource_ids
@@ -123,4 +123,8 @@
"structures": [19000],
"messages": [19010],
},
+
+ "chrome/browser/autofill/autofill_resources.grd": {
+ "messages": [19500],
+ },
}