summaryrefslogtreecommitdiffstats
path: root/chrome/browser/autofill
diff options
context:
space:
mode:
authorisherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-27 18:20:42 +0000
committerisherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-27 18:20:42 +0000
commit5fa9ce5183c11e5548cf7f034b9a7a15c46030c3 (patch)
treea756ff48c480438b8aba7129e0b6ae54ba9b519e /chrome/browser/autofill
parentf89aa175f3b3a8b741131805502dbba7af6b3b1a (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/autofill/address_field.cc3
-rw-r--r--chrome/browser/autofill/address_field.h2
-rw-r--r--chrome/browser/autofill/address_field_unittest.cc2
-rw-r--r--chrome/browser/autofill/autofill_metrics.cc3
-rw-r--r--chrome/browser/autofill/autofill_regex_constants.cc.utf82
-rw-r--r--chrome/browser/autofill/autofill_regex_constants.h1
-rw-r--r--chrome/browser/autofill/credit_card_field.cc13
-rw-r--r--chrome/browser/autofill/credit_card_field.h4
-rw-r--r--chrome/browser/autofill/credit_card_field_unittest.cc94
-rw-r--r--chrome/browser/autofill/email_field.cc3
-rw-r--r--chrome/browser/autofill/email_field.h2
-rw-r--r--chrome/browser/autofill/form_field.cc24
-rw-r--r--chrome/browser/autofill/form_field.h8
-rw-r--r--chrome/browser/autofill/form_structure_unittest.cc4
-rw-r--r--chrome/browser/autofill/name_field.cc3
-rw-r--r--chrome/browser/autofill/name_field.h2
-rw-r--r--chrome/browser/autofill/name_field_unittest.cc2
-rw-r--r--chrome/browser/autofill/phone_field.cc3
-rw-r--r--chrome/browser/autofill/phone_field.h2
-rw-r--r--chrome/browser/autofill/phone_field_unittest.cc2
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: