diff options
author | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-27 18:20:42 +0000 |
---|---|---|
committer | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-27 18:20:42 +0000 |
commit | 5fa9ce5183c11e5548cf7f034b9a7a15c46030c3 (patch) | |
tree | a756ff48c480438b8aba7129e0b6ae54ba9b519e /chrome/browser/autofill | |
parent | f89aa175f3b3a8b741131805502dbba7af6b3b1a (diff) | |
download | chromium_src-5fa9ce5183c11e5548cf7f034b9a7a15c46030c3.zip chromium_src-5fa9ce5183c11e5548cf7f034b9a7a15c46030c3.tar.gz chromium_src-5fa9ce5183c11e5548cf7f034b9a7a15c46030c3.tar.bz2 |
[Autofill] Add parsing for credit card type fields.
This currently only supports text and select inputs (as does the rest of Autofill). It also currently uses a very simple regex for detecting the field type; this will likely need to be extended.
BUG=157819
TEST=unit_tests --gtest_filter=CreditCardFieldTest.*
Review URL: https://chromiumcodereview.appspot.com/11275030
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@164549 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/autofill')
20 files changed, 140 insertions, 39 deletions
diff --git a/chrome/browser/autofill/address_field.cc b/chrome/browser/autofill/address_field.cc index 7370fa0..da40384 100644 --- a/chrome/browser/autofill/address_field.cc +++ b/chrome/browser/autofill/address_field.cc @@ -17,7 +17,8 @@ #include "chrome/browser/autofill/field_types.h" #include "ui/base/l10n/l10n_util.h" -FormField* AddressField::Parse(AutofillScanner* scanner) { +FormField* AddressField::Parse(AutofillScanner* scanner, + bool parse_new_field_types) { if (scanner->IsEnd()) return NULL; diff --git a/chrome/browser/autofill/address_field.h b/chrome/browser/autofill/address_field.h index 05bf943..29ab7b1 100644 --- a/chrome/browser/autofill/address_field.h +++ b/chrome/browser/autofill/address_field.h @@ -19,7 +19,7 @@ class AutofillScanner; class AddressField : public FormField { public: - static FormField* Parse(AutofillScanner* scanner); + static FormField* Parse(AutofillScanner* scanner, bool parse_new_field_types); protected: // FormField: diff --git a/chrome/browser/autofill/address_field_unittest.cc b/chrome/browser/autofill/address_field_unittest.cc index a2a209b..b91ae85 100644 --- a/chrome/browser/autofill/address_field_unittest.cc +++ b/chrome/browser/autofill/address_field_unittest.cc @@ -23,7 +23,7 @@ class AddressFieldTest : public testing::Test { // Downcast for tests. static AddressField* Parse(AutofillScanner* scanner) { - return static_cast<AddressField*>(AddressField::Parse(scanner)); + return static_cast<AddressField*>(AddressField::Parse(scanner, false)); } private: diff --git a/chrome/browser/autofill/autofill_metrics.cc b/chrome/browser/autofill/autofill_metrics.cc index 20f5506..c806a98 100644 --- a/chrome/browser/autofill/autofill_metrics.cc +++ b/chrome/browser/autofill/autofill_metrics.cc @@ -52,6 +52,7 @@ enum FieldTypeGroupForMetrics { CREDIT_CARD_NAME, CREDIT_CARD_NUMBER, CREDIT_CARD_DATE, + CREDIT_CARD_TYPE, NUM_FIELD_TYPE_GROUPS_FOR_METRICS }; @@ -137,6 +138,8 @@ int GetFieldTypeGroupMetric(const AutofillFieldType field_type, case ::CREDIT_CARD_NUMBER: group = CREDIT_CARD_NUMBER; break; + case ::CREDIT_CARD_TYPE: + group = CREDIT_CARD_TYPE; default: group = CREDIT_CARD_DATE; } diff --git a/chrome/browser/autofill/autofill_regex_constants.cc.utf8 b/chrome/browser/autofill/autofill_regex_constants.cc.utf8 index 0133106..2c10e2e 100644 --- a/chrome/browser/autofill/autofill_regex_constants.cc.utf8 +++ b/chrome/browser/autofill/autofill_regex_constants.cc.utf8 @@ -145,6 +145,8 @@ const char kCardNumberRe[] = "|카드"; // ko-KR const char kCardCvcRe[] = "verification|card identification|security code|cvn|cvv|cvc|csc"; +const char kCardTypeRe[] = + "card.?type"; // "Expiration date" is the most common label here, but some pages have // "Expires", "exp. date" or "exp. month" and "exp. year". We also look diff --git a/chrome/browser/autofill/autofill_regex_constants.h b/chrome/browser/autofill/autofill_regex_constants.h index 4d9ef46..1c18132 100644 --- a/chrome/browser/autofill/autofill_regex_constants.h +++ b/chrome/browser/autofill/autofill_regex_constants.h @@ -28,6 +28,7 @@ extern const char kNameOnCardRe[]; extern const char kNameOnCardContextualRe[]; extern const char kCardNumberRe[]; extern const char kCardCvcRe[]; +extern const char kCardTypeRe[]; extern const char kExpirationMonthRe[]; extern const char kExpirationYearRe[]; extern const char kExpirationDate2DigitYearRe[]; diff --git a/chrome/browser/autofill/credit_card_field.cc b/chrome/browser/autofill/credit_card_field.cc index 7d01aa5..251bac6 100644 --- a/chrome/browser/autofill/credit_card_field.cc +++ b/chrome/browser/autofill/credit_card_field.cc @@ -18,7 +18,8 @@ #include "ui/base/l10n/l10n_util.h" // static -FormField* CreditCardField::Parse(AutofillScanner* scanner) { +FormField* CreditCardField::Parse(AutofillScanner* scanner, + bool parse_new_field_types) { if (scanner->IsEnd()) return NULL; @@ -66,6 +67,15 @@ FormField* CreditCardField::Parse(AutofillScanner* scanner) { scanner->Rewind(); } + // Check for a credit card type (Visa, MasterCard, etc.) field. + if (parse_new_field_types) { + string16 type_pattern = UTF8ToUTF16(autofill::kCardTypeRe); + if (!credit_card_field->type_ && + ParseField(scanner, type_pattern, &credit_card_field->type_)) { + continue; + } + } + // We look for a card security code before we look for a credit // card number and match the general term "number". The security code // has a plethora of names; we've seen "verification #", @@ -76,7 +86,6 @@ FormField* CreditCardField::Parse(AutofillScanner* scanner) { ParseField(scanner, pattern, &credit_card_field->verification_)) { continue; } - // TODO(jhawkins): Parse the type select control. pattern = UTF8ToUTF16(autofill::kCardNumberRe); if (!credit_card_field->number_ && diff --git a/chrome/browser/autofill/credit_card_field.h b/chrome/browser/autofill/credit_card_field.h index 56a8962..5767f39 100644 --- a/chrome/browser/autofill/credit_card_field.h +++ b/chrome/browser/autofill/credit_card_field.h @@ -18,7 +18,8 @@ class AutofillScanner; class CreditCardField : public FormField { public: - static FormField* Parse(AutofillScanner* scanner); + static FormField* Parse(AutofillScanner* scanner, + bool parse_new_field_types); protected: // FormField: @@ -27,6 +28,7 @@ class CreditCardField : public FormField { private: FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseMiniumCreditCard); FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseFullCreditCard); + FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseCreditCardType); FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseExpMonthYear); FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseExpMonthYear2); FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseExpField); diff --git a/chrome/browser/autofill/credit_card_field_unittest.cc b/chrome/browser/autofill/credit_card_field_unittest.cc index b9b05e5..7c26880 100644 --- a/chrome/browser/autofill/credit_card_field_unittest.cc +++ b/chrome/browser/autofill/credit_card_field_unittest.cc @@ -22,7 +22,11 @@ class CreditCardFieldTest : public testing::Test { // Downcast for tests. static CreditCardField* Parse(AutofillScanner* scanner) { - return static_cast<CreditCardField*>(CreditCardField::Parse(scanner)); + return + static_cast<CreditCardField*>(CreditCardField::Parse(scanner, false)); + } + static CreditCardField* ParseWithNewFieldTypes(AutofillScanner* scanner) { + return static_cast<CreditCardField*>(CreditCardField::Parse(scanner, true)); } private: @@ -108,46 +112,106 @@ TEST_F(CreditCardFieldTest, ParseFullCreditCard) { FormFieldData field; field.form_control_type = "text"; + field.label = ASCIIToUTF16("Card Type"); + field.name = ASCIIToUTF16("card_type"); + list_.push_back(new AutofillField(field, ASCIIToUTF16("type"))); + field.label = ASCIIToUTF16("Name on Card"); field.name = ASCIIToUTF16("name_on_card"); - list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); + list_.push_back(new AutofillField(field, ASCIIToUTF16("name"))); field.label = ASCIIToUTF16("Card Number"); field.name = ASCIIToUTF16("card_number"); - list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); + list_.push_back(new AutofillField(field, ASCIIToUTF16("number"))); field.label = ASCIIToUTF16("Exp Month"); field.name = ASCIIToUTF16("ccmonth"); - list_.push_back(new AutofillField(field, ASCIIToUTF16("month3"))); + list_.push_back(new AutofillField(field, ASCIIToUTF16("month"))); field.label = ASCIIToUTF16("Exp Year"); field.name = ASCIIToUTF16("ccyear"); - list_.push_back(new AutofillField(field, ASCIIToUTF16("year4"))); + list_.push_back(new AutofillField(field, ASCIIToUTF16("year"))); field.label = ASCIIToUTF16("Verification"); field.name = ASCIIToUTF16("verification"); - list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc5"))); + list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc"))); AutofillScanner scanner(list_.get()); field_.reset(Parse(&scanner)); ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); ASSERT_TRUE( - field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); - EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); + field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end()); + EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]); ASSERT_TRUE( - field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); - EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); + field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end()); + EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]); ASSERT_TRUE( - field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end()); - EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]); + field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end()); + EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]); ASSERT_TRUE( - field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end()); + field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end()); EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, - field_type_map_[ASCIIToUTF16("year4")]); + field_type_map_[ASCIIToUTF16("year")]); + // We don't store CVV. + EXPECT_TRUE( + field_type_map_.find(ASCIIToUTF16("cvc")) == field_type_map_.end()); + // We don't fill card types by default. + EXPECT_TRUE( + field_type_map_.find(ASCIIToUTF16("type")) == field_type_map_.end()); +} + +TEST_F(CreditCardFieldTest, ParseCreditCardType) { + FormFieldData field; + field.form_control_type = "text"; + + field.label = ASCIIToUTF16("Card Type"); + field.name = ASCIIToUTF16("card_type"); + list_.push_back(new AutofillField(field, ASCIIToUTF16("type"))); + + field.label = ASCIIToUTF16("Name on Card"); + field.name = ASCIIToUTF16("name_on_card"); + list_.push_back(new AutofillField(field, ASCIIToUTF16("name"))); + + field.label = ASCIIToUTF16("Card Number"); + field.name = ASCIIToUTF16("card_number"); + list_.push_back(new AutofillField(field, ASCIIToUTF16("number"))); + + field.label = ASCIIToUTF16("Exp Month"); + field.name = ASCIIToUTF16("ccmonth"); + list_.push_back(new AutofillField(field, ASCIIToUTF16("month"))); + + field.label = ASCIIToUTF16("Exp Year"); + field.name = ASCIIToUTF16("ccyear"); + list_.push_back(new AutofillField(field, ASCIIToUTF16("year"))); + + field.label = ASCIIToUTF16("Verification"); + field.name = ASCIIToUTF16("verification"); + list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc"))); + + AutofillScanner scanner(list_.get()); + field_.reset(ParseWithNewFieldTypes(&scanner)); + ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); + ASSERT_TRUE(field_->ClassifyField(&field_type_map_)); + ASSERT_TRUE( + field_type_map_.find(ASCIIToUTF16("type")) != field_type_map_.end()); + EXPECT_EQ(CREDIT_CARD_TYPE, field_type_map_[ASCIIToUTF16("type")]); + ASSERT_TRUE( + field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end()); + EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]); + ASSERT_TRUE( + field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end()); + EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]); + ASSERT_TRUE( + field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end()); + EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]); + ASSERT_TRUE( + field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end()); + EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, + field_type_map_[ASCIIToUTF16("year")]); // We don't store CVV. EXPECT_TRUE( - field_type_map_.find(ASCIIToUTF16("cvc5")) == field_type_map_.end()); + field_type_map_.find(ASCIIToUTF16("cvc")) == field_type_map_.end()); } TEST_F(CreditCardFieldTest, ParseExpMonthYear) { diff --git a/chrome/browser/autofill/email_field.cc b/chrome/browser/autofill/email_field.cc index b44bc56..9976d8b 100644 --- a/chrome/browser/autofill/email_field.cc +++ b/chrome/browser/autofill/email_field.cc @@ -10,7 +10,8 @@ #include "ui/base/l10n/l10n_util.h" // static -FormField* EmailField::Parse(AutofillScanner* scanner) { +FormField* EmailField::Parse(AutofillScanner* scanner, + bool parse_new_field_types) { const AutofillField* field; if (ParseFieldSpecifics(scanner, UTF8ToUTF16(autofill::kEmailRe), MATCH_DEFAULT | MATCH_EMAIL, &field)) { diff --git a/chrome/browser/autofill/email_field.h b/chrome/browser/autofill/email_field.h index 902335c..1abae63 100644 --- a/chrome/browser/autofill/email_field.h +++ b/chrome/browser/autofill/email_field.h @@ -11,7 +11,7 @@ class EmailField : public FormField { public: - static FormField* Parse(AutofillScanner* scanner); + static FormField* Parse(AutofillScanner* scanner, bool parse_new_field_types); protected: // FormField: diff --git a/chrome/browser/autofill/form_field.cc b/chrome/browser/autofill/form_field.cc index 76ecb87..b8f941b 100644 --- a/chrome/browser/autofill/form_field.cc +++ b/chrome/browser/autofill/form_field.cc @@ -8,6 +8,7 @@ #include <string> #include <utility> +#include "base/command_line.h" #include "base/logging.h" #include "base/memory/scoped_ptr.h" #include "base/string_util.h" @@ -23,6 +24,7 @@ #include "chrome/browser/autofill/form_structure.h" #include "chrome/browser/autofill/name_field.h" #include "chrome/browser/autofill/phone_field.h" +#include "chrome/common/chrome_switches.h" #include "ui/base/l10n/l10n_util.h" namespace { @@ -52,20 +54,29 @@ void FormField::ParseFormFields(const std::vector<AutofillField*>& fields, std::vector<const AutofillField*> remaining_fields(fields.size()); std::copy(fields.begin(), fields.end(), remaining_fields.begin()); + const CommandLine& command_line = *CommandLine::ForCurrentProcess(); + bool parse_new_field_types = + command_line.HasSwitch(switches::kEnableNewAutofillHeuristics); + // Email pass. - ParseFormFieldsPass(EmailField::Parse, &remaining_fields, map); + ParseFormFieldsPass(EmailField::Parse, parse_new_field_types, + &remaining_fields, map); // Phone pass. - ParseFormFieldsPass(PhoneField::Parse, &remaining_fields, map); + ParseFormFieldsPass(PhoneField::Parse, parse_new_field_types, + &remaining_fields, map); // Address pass. - ParseFormFieldsPass(AddressField::Parse, &remaining_fields, map); + ParseFormFieldsPass(AddressField::Parse, parse_new_field_types, + &remaining_fields, map); // Credit card pass. - ParseFormFieldsPass(CreditCardField::Parse, &remaining_fields, map); + ParseFormFieldsPass(CreditCardField::Parse, parse_new_field_types, + &remaining_fields, map); // Name pass. - ParseFormFieldsPass(NameField::Parse, &remaining_fields, map); + ParseFormFieldsPass(NameField::Parse, parse_new_field_types, + &remaining_fields, map); } // static @@ -162,6 +173,7 @@ bool FormField::Match(const AutofillField* field, // static void FormField::ParseFormFieldsPass(ParseFunction parse, + bool parse_new_field_types, std::vector<const AutofillField*>* fields, FieldTypeMap* map) { // Store unmatched fields for further processing by the caller. @@ -169,7 +181,7 @@ void FormField::ParseFormFieldsPass(ParseFunction parse, AutofillScanner scanner(*fields); while (!scanner.IsEnd()) { - scoped_ptr<FormField> form_field(parse(&scanner)); + scoped_ptr<FormField> form_field(parse(&scanner, parse_new_field_types)); if (!form_field.get()) { remaining_fields.push_back(scanner.Cursor()); scanner.Advance(); diff --git a/chrome/browser/autofill/form_field.h b/chrome/browser/autofill/form_field.h index fb517d2..1b4da6a 100644 --- a/chrome/browser/autofill/form_field.h +++ b/chrome/browser/autofill/form_field.h @@ -20,8 +20,6 @@ class AutofillScanner; // name, phone number, or address field. class FormField { public: - typedef FormField* ParseFunction(AutofillScanner* scanner); - virtual ~FormField() {} // Classifies each field in |fields| with its heuristically detected type. @@ -88,6 +86,11 @@ class FormField { private: FRIEND_TEST_ALL_PREFIXES(FormFieldTest, Match); + // Function pointer type for the parsing function that should be passed to the + // ParseFormFieldsPass() helper function. + typedef FormField* ParseFunction(AutofillScanner* scanner, + bool parse_new_field_types); + // Matches |pattern| to the contents of the field at the head of the // |scanner|. // Returns |true| if a match is found according to |match_type|, and |false| @@ -109,6 +112,7 @@ class FormField { // holds any remaining unclassified fields for further processing. // Classification results of the processed fields are stored in |map|. static void ParseFormFieldsPass(ParseFunction parse, + bool parse_new_field_types, std::vector<const AutofillField*>* fields, FieldTypeMap* map); diff --git a/chrome/browser/autofill/form_structure_unittest.cc b/chrome/browser/autofill/form_structure_unittest.cc index a1524194..476c6d2 100644 --- a/chrome/browser/autofill/form_structure_unittest.cc +++ b/chrome/browser/autofill/form_structure_unittest.cc @@ -927,8 +927,8 @@ TEST(FormStructureTest, HeuristicsCreditCardInfoWithUnknownCardField) { // This is not a field we know how to process. But we should skip over it // and process the other fields in the card block. - field.label = ASCIIToUTF16("Card Type"); - field.name = ASCIIToUTF16("card_type"); + field.label = ASCIIToUTF16("Card image"); + field.name = ASCIIToUTF16("card_image"); form.fields.push_back(field); field.label = ASCIIToUTF16("Card Number"); diff --git a/chrome/browser/autofill/name_field.cc b/chrome/browser/autofill/name_field.cc index 7467bcc..9d4afea 100644 --- a/chrome/browser/autofill/name_field.cc +++ b/chrome/browser/autofill/name_field.cc @@ -56,7 +56,8 @@ class FirstLastNameField : public NameField { } // namespace -FormField* NameField::Parse(AutofillScanner* scanner) { +FormField* NameField::Parse(AutofillScanner* scanner, + bool parse_new_field_types) { if (scanner->IsEnd()) return NULL; diff --git a/chrome/browser/autofill/name_field.h b/chrome/browser/autofill/name_field.h index 7ae6d20..25054cf 100644 --- a/chrome/browser/autofill/name_field.h +++ b/chrome/browser/autofill/name_field.h @@ -17,7 +17,7 @@ class AutofillScanner; // A form field that can parse either a FullNameField or a FirstLastNameField. class NameField : public FormField { public: - static FormField* Parse(AutofillScanner* scanner); + static FormField* Parse(AutofillScanner* scanner, bool parse_new_field_types); protected: NameField() {} diff --git a/chrome/browser/autofill/name_field_unittest.cc b/chrome/browser/autofill/name_field_unittest.cc index d6448cd..08b4be0 100644 --- a/chrome/browser/autofill/name_field_unittest.cc +++ b/chrome/browser/autofill/name_field_unittest.cc @@ -22,7 +22,7 @@ class NameFieldTest : public testing::Test { // Downcast for tests. static NameField* Parse(AutofillScanner* scanner) { - return static_cast<NameField*>(NameField::Parse(scanner)); + return static_cast<NameField*>(NameField::Parse(scanner, false)); } private: diff --git a/chrome/browser/autofill/phone_field.cc b/chrome/browser/autofill/phone_field.cc index eec4ccd..7845976 100644 --- a/chrome/browser/autofill/phone_field.cc +++ b/chrome/browser/autofill/phone_field.cc @@ -117,7 +117,8 @@ PhoneField::Parser PhoneField::phone_field_grammars_[] = { PhoneField::~PhoneField() {} // static -FormField* PhoneField::Parse(AutofillScanner* scanner) { +FormField* PhoneField::Parse(AutofillScanner* scanner, + bool parse_new_field_types) { if (scanner->IsEnd()) return NULL; diff --git a/chrome/browser/autofill/phone_field.h b/chrome/browser/autofill/phone_field.h index 6a6b64a..5aad8bc 100644 --- a/chrome/browser/autofill/phone_field.h +++ b/chrome/browser/autofill/phone_field.h @@ -23,7 +23,7 @@ class PhoneField : public FormField { public: virtual ~PhoneField(); - static FormField* Parse(AutofillScanner* scanner); + static FormField* Parse(AutofillScanner* scanner, bool parse_new_field_types); protected: // FormField: diff --git a/chrome/browser/autofill/phone_field_unittest.cc b/chrome/browser/autofill/phone_field_unittest.cc index 1b82952..7cf5d09 100644 --- a/chrome/browser/autofill/phone_field_unittest.cc +++ b/chrome/browser/autofill/phone_field_unittest.cc @@ -22,7 +22,7 @@ class PhoneFieldTest : public testing::Test { // Downcast for tests. static PhoneField* Parse(AutofillScanner* scanner) { - return static_cast<PhoneField*>(PhoneField::Parse(scanner)); + return static_cast<PhoneField*>(PhoneField::Parse(scanner, false)); } private: |