diff options
author | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-05 20:11:02 +0000 |
---|---|---|
committer | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-05 20:11:02 +0000 |
commit | 21861f27de14a1af8dae37a3bba5e98c3ed59e6c (patch) | |
tree | 2bee8fdaed60665c768317459c96159abfea7283 | |
parent | aa742b4f9495fc201d68ccd29f0f6c4bbbef64e9 (diff) | |
download | chromium_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.cc | 62 | ||||
-rw-r--r-- | chrome/browser/autofill/autofill_resources.grd | 129 | ||||
-rw-r--r-- | chrome/browser/autofill/credit_card_field.cc | 19 | ||||
-rw-r--r-- | chrome/browser/autofill/form_field.cc | 4 | ||||
-rw-r--r-- | chrome/browser/autofill/form_structure_browsertest.cc | 26 | ||||
-rw-r--r-- | chrome/browser/autofill/name_field.cc | 20 | ||||
-rw-r--r-- | chrome/browser/autofill/phone_field.cc | 22 | ||||
-rw-r--r-- | chrome/chrome.gyp | 2 | ||||
-rw-r--r-- | chrome/chrome_dll.gypi | 3 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 10 | ||||
-rw-r--r-- | tools/grit/resource_ids | 4 |
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], + }, } |