summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorisherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-07 04:56:18 +0000
committerisherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-07 04:56:18 +0000
commitfbd42ecccf360f9b89b77573afa62e8a5a0b8383 (patch)
treec2a046226e12cab6cc2c681e8a362829dbb73233
parentabd69452e16e9f5689e38a615ffd93ee62da16fa (diff)
downloadchromium_src-fbd42ecccf360f9b89b77573afa62e8a5a0b8383.zip
chromium_src-fbd42ecccf360f9b89b77573afa62e8a5a0b8383.tar.gz
chromium_src-fbd42ecccf360f9b89b77573afa62e8a5a0b8383.tar.bz2
[Autofill] Distinguish between native field types and potentially HTML field types.
The Autofill code currently uses a single enum AutofillFieldType to describe all field types. However, several of the field type hints provided in the HTML autocomplete specification do not map nicely onto the native (server-supported) field types. This CL replaces all uses of the AutofillFieldType enum with either (1) a new enum, NativeFieldType, for code that does not need to be aware of HTML field types (2) AutofillType, a wrapper type that will be able to wrap either a native field type or an HTML type hint. TBR=estade@chromium.org BUG=254682, 261978 Review URL: https://codereview.chromium.org/22009003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@216075 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/autofill/android/personal_data_manager_android.cc5
-rw-r--r--chrome/browser/autofill/autofill_browsertest.cc13
-rw-r--r--chrome/browser/autofill/form_structure_browsertest.cc3
-rw-r--r--chrome/browser/sync/profile_sync_service_autofill_unittest.cc4
-rw-r--r--chrome/browser/sync/test/integration/autofill_helper.cc2
-rw-r--r--chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc4
-rw-r--r--chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc16
-rw-r--r--chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc79
-rw-r--r--chrome/browser/ui/autofill/autofill_dialog_controller_impl.h12
-rw-r--r--chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc74
-rw-r--r--chrome/browser/ui/autofill/autofill_dialog_types.h4
-rw-r--r--chrome/browser/ui/autofill/autofill_dialog_view_delegate.h6
-rw-r--r--chrome/browser/ui/autofill/data_model_wrapper.cc55
-rw-r--r--chrome/browser/ui/autofill/data_model_wrapper.h20
-rw-r--r--chrome/browser/ui/autofill/data_model_wrapper_unittest.cc13
-rw-r--r--chrome/browser/ui/autofill/mock_autofill_dialog_view_delegate.h6
-rw-r--r--chrome/browser/ui/cocoa/autofill/autofill_section_container.h2
-rw-r--r--chrome/browser/ui/cocoa/autofill/autofill_section_container.mm22
-rw-r--r--chrome/browser/ui/views/autofill/autofill_dialog_views.cc6
-rw-r--r--chrome/browser/ui/webui/options/autofill_options_handler.cc6
-rw-r--r--chrome/browser/webdata/autofill_profile_syncable_service.cc6
-rw-r--r--chrome/browser/webdata/autofill_profile_syncable_service.h6
-rw-r--r--components/autofill/content/browser/autocheckout_manager.cc30
-rw-r--r--components/autofill/content/browser/autocheckout_manager_unittest.cc8
-rw-r--r--components/autofill/content/browser/wallet/form_field_error.cc2
-rw-r--r--components/autofill/content/browser/wallet/form_field_error.h4
-rw-r--r--components/autofill/content/browser/wallet/full_wallet.cc8
-rw-r--r--components/autofill/content/browser/wallet/full_wallet.h5
-rw-r--r--components/autofill/content/browser/wallet/full_wallet_unittest.cc20
-rw-r--r--components/autofill/content/browser/wallet/wallet_address.cc5
-rw-r--r--components/autofill/content/browser/wallet/wallet_address.h6
-rw-r--r--components/autofill/content/browser/wallet/wallet_items.cc6
-rw-r--r--components/autofill/content/browser/wallet/wallet_items.h6
-rw-r--r--components/autofill/core/browser/address.cc43
-rw-r--r--components/autofill/core/browser/address.h20
-rw-r--r--components/autofill/core/browser/address_field.cc16
-rw-r--r--components/autofill/core/browser/address_field.h2
-rw-r--r--components/autofill/core/browser/address_field_unittest.cc2
-rw-r--r--components/autofill/core/browser/address_unittest.cc43
-rw-r--r--components/autofill/core/browser/android/auxiliary_profiles_android.cc3
-rw-r--r--components/autofill/core/browser/autofill_common_test.cc3
-rw-r--r--components/autofill/core/browser/autofill_data_model.cc19
-rw-r--r--components/autofill/core/browser/autofill_data_model.h2
-rw-r--r--components/autofill/core/browser/autofill_data_model_unittest.cc6
-rw-r--r--components/autofill/core/browser/autofill_download.cc4
-rw-r--r--components/autofill/core/browser/autofill_download.h2
-rw-r--r--components/autofill/core/browser/autofill_download_unittest.cc12
-rw-r--r--components/autofill/core/browser/autofill_field.cc13
-rw-r--r--components/autofill/core/browser/autofill_field.h22
-rw-r--r--components/autofill/core/browser/autofill_field_unittest.cc11
-rw-r--r--components/autofill/core/browser/autofill_ie_toolbar_import_win.cc8
-rw-r--r--components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc8
-rw-r--r--components/autofill/core/browser/autofill_manager.cc23
-rw-r--r--components/autofill/core/browser/autofill_manager.h8
-rw-r--r--components/autofill/core/browser/autofill_manager_unittest.cc32
-rw-r--r--components/autofill/core/browser/autofill_merge_unittest.cc6
-rw-r--r--components/autofill/core/browser/autofill_metrics.cc10
-rw-r--r--components/autofill/core/browser/autofill_metrics.h6
-rw-r--r--components/autofill/core/browser/autofill_metrics_unittest.cc28
-rw-r--r--components/autofill/core/browser/autofill_profile.cc211
-rw-r--r--components/autofill/core/browser/autofill_profile.h45
-rw-r--r--components/autofill/core/browser/autofill_profile_unittest.cc21
-rw-r--r--components/autofill/core/browser/autofill_server_field_info.h2
-rw-r--r--components/autofill/core/browser/autofill_type.cc33
-rw-r--r--components/autofill/core/browser/autofill_type.h21
-rw-r--r--components/autofill/core/browser/autofill_type_unittest.cc20
-rw-r--r--components/autofill/core/browser/autofill_xml_parser.cc2
-rw-r--r--components/autofill/core/browser/contact_info.cc22
-rw-r--r--components/autofill/core/browser/contact_info.h22
-rw-r--r--components/autofill/core/browser/credit_card.cc61
-rw-r--r--components/autofill/core/browser/credit_card.h19
-rw-r--r--components/autofill/core/browser/credit_card_field.cc2
-rw-r--r--components/autofill/core/browser/credit_card_field.h2
-rw-r--r--components/autofill/core/browser/credit_card_field_unittest.cc2
-rw-r--r--components/autofill/core/browser/credit_card_unittest.cc34
-rw-r--r--components/autofill/core/browser/email_field.cc2
-rw-r--r--components/autofill/core/browser/email_field.h2
-rw-r--r--components/autofill/core/browser/field_types.h9
-rw-r--r--components/autofill/core/browser/form_field.cc9
-rw-r--r--components/autofill/core/browser/form_field.h12
-rw-r--r--components/autofill/core/browser/form_field_unittest.cc2
-rw-r--r--components/autofill/core/browser/form_group.cc31
-rw-r--r--components/autofill/core/browser/form_group.h20
-rw-r--r--components/autofill/core/browser/form_structure.cc67
-rw-r--r--components/autofill/core/browser/form_structure.h4
-rw-r--r--components/autofill/core/browser/form_structure_unittest.cc54
-rw-r--r--components/autofill/core/browser/name_field.cc12
-rw-r--r--components/autofill/core/browser/name_field.h2
-rw-r--r--components/autofill/core/browser/name_field_unittest.cc2
-rw-r--r--components/autofill/core/browser/personal_data_manager.cc60
-rw-r--r--components/autofill/core/browser/personal_data_manager.h8
-rw-r--r--components/autofill/core/browser/personal_data_manager_mac.mm3
-rw-r--r--components/autofill/core/browser/personal_data_manager_unittest.cc2
-rw-r--r--components/autofill/core/browser/phone_field.cc4
-rw-r--r--components/autofill/core/browser/phone_field.h2
-rw-r--r--components/autofill/core/browser/phone_field_unittest.cc2
-rw-r--r--components/autofill/core/browser/phone_number.cc45
-rw-r--r--components/autofill/core/browser/phone_number.h21
-rw-r--r--components/autofill/core/browser/phone_number_unittest.cc55
-rw-r--r--components/autofill/core/browser/webdata/autofill_table.cc7
-rw-r--r--components/webdata/common/web_database_migration_unittest.cc6
101 files changed, 947 insertions, 831 deletions
diff --git a/chrome/browser/autofill/android/personal_data_manager_android.cc b/chrome/browser/autofill/android/personal_data_manager_android.cc
index 9285982..2b6063a 100644
--- a/chrome/browser/autofill/android/personal_data_manager_android.cc
+++ b/chrome/browser/autofill/android/personal_data_manager_android.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "components/autofill/core/browser/autofill_country.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/personal_data_manager.h"
#include "jni/PersonalDataManager_jni.h"
@@ -54,7 +55,7 @@ ScopedJavaLocalRef<jobject> CreateJavaProfileFromNative(
profile.GetRawInfo(ADDRESS_HOME_ZIP)).obj(),
ConvertUTF16ToJavaString(
env,
- profile.GetInfo(ADDRESS_HOME_COUNTRY,
+ profile.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY),
g_browser_process->GetApplicationLocale())).obj(),
ConvertUTF16ToJavaString(
env,
@@ -98,7 +99,7 @@ void PopulateNativeProfileFromJava(
ConvertJavaStringToUTF16(
Java_AutofillProfile_getZip(env, jprofile)));
profile->SetInfo(
- ADDRESS_HOME_COUNTRY,
+ AutofillType(ADDRESS_HOME_COUNTRY),
ConvertJavaStringToUTF16(
Java_AutofillProfile_getCountry(env, jprofile)),
g_browser_process->GetApplicationLocale());
diff --git a/chrome/browser/autofill/autofill_browsertest.cc b/chrome/browser/autofill/autofill_browsertest.cc
index 995025a..b1cda4b 100644
--- a/chrome/browser/autofill/autofill_browsertest.cc
+++ b/chrome/browser/autofill/autofill_browsertest.cc
@@ -1009,7 +1009,8 @@ IN_PROC_BROWSER_TEST_F(AutofillTest, FillProfileCrazyCharacters) {
L"\u898f\u7ba1\u5c0e\u904a"));
profile1.SetRawInfo(ADDRESS_HOME_ZIP, WideToUTF16(L"YOHO_54676"));
profile1.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, WideToUTF16(L"861088828000"));
- profile1.SetInfo(ADDRESS_HOME_COUNTRY, WideToUTF16(L"India"), "en-US");
+ profile1.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), WideToUTF16(L"India"), "en-US");
profiles.push_back(profile1);
AutofillProfile profile2;
@@ -1076,8 +1077,9 @@ IN_PROC_BROWSER_TEST_F(AutofillTest, FillProfileCrazyCharacters) {
profile7.SetRawInfo(ADDRESS_HOME_STATE, WideToUTF16(L"CA"));
profile7.SetRawInfo(ADDRESS_HOME_ZIP, WideToUTF16(L"94086"));
profile7.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, WideToUTF16(L"15466784565"));
- profile7.SetInfo(ADDRESS_HOME_COUNTRY, WideToUTF16(L"United States"),
- "en-US");
+ profile7.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), WideToUTF16(L"United States"),
+ "en-US");
profiles.push_back(profile7);
SetProfiles(&profiles);
@@ -1148,8 +1150,9 @@ IN_PROC_BROWSER_TEST_F(AutofillTest, Invalid) {
without_invalid.SetRawInfo(ADDRESS_HOME_CITY, ASCIIToUTF16("Sunnyvale"));
without_invalid.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA"));
without_invalid.SetRawInfo(ADDRESS_HOME_ZIP, ASCIIToUTF16("my_zip"));
- without_invalid.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("United States"),
- "en-US");
+ without_invalid.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("United States"),
+ "en-US");
AutofillProfile with_invalid = without_invalid;
with_invalid.SetRawInfo(PHONE_HOME_WHOLE_NUMBER,
diff --git a/chrome/browser/autofill/form_structure_browsertest.cc b/chrome/browser/autofill/form_structure_browsertest.cc
index 0666fa2..aa8f085 100644
--- a/chrome/browser/autofill/form_structure_browsertest.cc
+++ b/chrome/browser/autofill/form_structure_browsertest.cc
@@ -90,7 +90,8 @@ std::string FormStructureBrowserTest::FormStructuresToString(
(*iter)->begin();
field_iter != (*iter)->end();
++field_iter) {
- forms_string += AutofillType::FieldTypeToString((*field_iter)->type());
+ forms_string +=
+ AutofillType::FieldTypeToString((*field_iter)->Type().server_type());
forms_string += " | " + UTF16ToUTF8((*field_iter)->name);
forms_string += " | " + UTF16ToUTF8((*field_iter)->label);
forms_string += " | " + UTF16ToUTF8((*field_iter)->value);
diff --git a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc
index 72b6a0e..1af7644 100644
--- a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc
+++ b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc
@@ -63,7 +63,7 @@
using autofill::AutofillChange;
using autofill::AutofillChangeList;
using autofill::AutofillEntry;
-using autofill::AutofillFieldType;
+using autofill::ServerFieldType;
using autofill::AutofillKey;
using autofill::AutofillProfile;
using autofill::AutofillProfileChange;
@@ -923,7 +923,7 @@ namespace {
// of the field in |profile2|.
bool IncludesField(const AutofillProfile& profile1,
const AutofillProfile& profile2,
- AutofillFieldType field_type) {
+ ServerFieldType field_type) {
std::vector<string16> values1;
profile1.GetRawMultiInfo(field_type, &values1);
std::vector<string16> values2;
diff --git a/chrome/browser/sync/test/integration/autofill_helper.cc b/chrome/browser/sync/test/integration/autofill_helper.cc
index 43359c6..54bb657 100644
--- a/chrome/browser/sync/test/integration/autofill_helper.cc
+++ b/chrome/browser/sync/test/integration/autofill_helper.cc
@@ -284,7 +284,7 @@ void UpdateProfile(int profile,
for (size_t i = 0; i < all_profiles.size(); ++i) {
profiles.push_back(*all_profiles[i]);
if (all_profiles[i]->guid() == guid)
- profiles.back().SetRawInfo(type.field_type(), value);
+ profiles.back().SetRawInfo(type.server_type(), value);
}
autofill_helper::SetProfiles(profile, &profiles);
}
diff --git a/chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc b/chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc
index 49d79ad..7fe485b 100644
--- a/chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc
+++ b/chrome/browser/sync/test/integration/performance/autofill_sync_perf_test.cc
@@ -13,7 +13,7 @@
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/webdata/autofill_entry.h"
-using autofill::AutofillFieldType;
+using autofill::ServerFieldType;
using autofill::AutofillKey;
using autofill::AutofillProfile;
@@ -103,7 +103,7 @@ void AutofillSyncPerfTest::UpdateProfiles(int profile) {
std::vector<AutofillProfile> autofill_profiles;
for (size_t i = 0; i < all_profiles.size(); ++i) {
autofill_profiles.push_back(*all_profiles[i]);
- autofill_profiles.back().SetRawInfo(AutofillFieldType(autofill::NAME_FIRST),
+ autofill_profiles.back().SetRawInfo(autofill::NAME_FIRST,
UTF8ToUTF16(NextName()));
}
SetProfiles(profile, &autofill_profiles);
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
index 478c15b..6aa1712 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_browsertest.cc
@@ -122,7 +122,7 @@ class TestAutofillDialogController : public AutofillDialogControllerImpl {
virtual string16 InputValidityMessage(
DialogSection section,
- AutofillFieldType type,
+ ServerFieldType type,
const string16& value) OVERRIDE {
if (!use_validation_)
return string16();
@@ -497,7 +497,7 @@ IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, FillInputFromAutofill) {
// All inputs should be filled.
AutofillProfileWrapper wrapper(&full_profile, 0);
for (size_t i = 0; i < inputs.size(); ++i) {
- EXPECT_EQ(wrapper.GetInfo(inputs[i].type),
+ EXPECT_EQ(wrapper.GetInfo(AutofillType(inputs[i].type)),
view->GetTextContentsOfInput(inputs[i]));
}
@@ -509,7 +509,7 @@ IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, FillInputFromAutofill) {
// Empty inputs should be filled, others should be left alone.
string16 expectation =
&inputs[i] == &triggering_input || users_input.empty() ?
- wrapper.GetInfo(inputs[i].type) :
+ wrapper.GetInfo(AutofillType(inputs[i].type)) :
users_input;
expectations.push_back(expectation);
}
@@ -590,7 +590,7 @@ IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest,
// All inputs should be filled.
AutofillCreditCardWrapper wrapper1(&card1);
for (size_t i = 0; i < inputs.size(); ++i) {
- EXPECT_EQ(wrapper1.GetInfo(inputs[i].type),
+ EXPECT_EQ(wrapper1.GetInfo(AutofillType(inputs[i].type)),
view->GetTextContentsOfInput(inputs[i]));
}
@@ -609,12 +609,12 @@ IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest,
if (&input == &triggering_input ||
input.type == CREDIT_CARD_EXP_MONTH ||
input.type == CREDIT_CARD_EXP_4_DIGIT_YEAR) {
- EXPECT_EQ(wrapper2.GetInfo(input.type),
+ EXPECT_EQ(wrapper2.GetInfo(AutofillType(input.type)),
view->GetTextContentsOfInput(input));
} else if (input.type == CREDIT_CARD_VERIFICATION_CODE) {
EXPECT_TRUE(view->GetTextContentsOfInput(input).empty());
} else {
- EXPECT_EQ(wrapper1.GetInfo(input.type),
+ EXPECT_EQ(wrapper1.GetInfo(AutofillType(input.type)),
view->GetTextContentsOfInput(input));
}
}
@@ -636,12 +636,12 @@ IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest,
if (&input == &triggering_input ||
input.type == CREDIT_CARD_EXP_MONTH ||
input.type == CREDIT_CARD_EXP_4_DIGIT_YEAR) {
- EXPECT_EQ(wrapper2.GetInfo(input.type),
+ EXPECT_EQ(wrapper2.GetInfo(AutofillType(input.type)),
view->GetTextContentsOfInput(input));
} else if (input.type == CREDIT_CARD_VERIFICATION_CODE) {
EXPECT_TRUE(view->GetTextContentsOfInput(input).empty());
} else {
- EXPECT_EQ(wrapper1.GetInfo(input.type),
+ EXPECT_EQ(wrapper1.GetInfo(AutofillType(input.type)),
view->GetTextContentsOfInput(input));
}
}
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
index 354dca5..2e0ea7f 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
@@ -112,22 +112,22 @@ bool IsWalletSupportedCard(const std::string& card_type) {
// Returns true if |input| should be shown when |field_type| has been requested.
bool InputTypeMatchesFieldType(const DetailInput& input,
- AutofillFieldType field_type) {
+ const AutofillType& field_type) {
// If any credit card expiration info is asked for, show both month and year
// inputs.
- if (field_type == CREDIT_CARD_EXP_4_DIGIT_YEAR ||
- field_type == CREDIT_CARD_EXP_2_DIGIT_YEAR ||
- field_type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR ||
- field_type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR ||
- field_type == CREDIT_CARD_EXP_MONTH) {
+ if (field_type.server_type() == CREDIT_CARD_EXP_4_DIGIT_YEAR ||
+ field_type.server_type() == CREDIT_CARD_EXP_2_DIGIT_YEAR ||
+ field_type.server_type() == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR ||
+ field_type.server_type() == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR ||
+ field_type.server_type() == CREDIT_CARD_EXP_MONTH) {
return input.type == CREDIT_CARD_EXP_4_DIGIT_YEAR ||
input.type == CREDIT_CARD_EXP_MONTH;
}
- if (field_type == CREDIT_CARD_TYPE)
+ if (field_type.server_type() == CREDIT_CARD_TYPE)
return input.type == CREDIT_CARD_NUMBER;
- return input.type == field_type;
+ return input.type == field_type.server_type();
}
// Returns true if |input| in the given |section| should be used for a
@@ -135,16 +135,18 @@ bool InputTypeMatchesFieldType(const DetailInput& input,
bool DetailInputMatchesField(DialogSection section,
const DetailInput& input,
const AutofillField& field) {
+ AutofillType field_type = field.Type();
+
// The credit card name is filled from the billing section's data.
- if (field.type() == CREDIT_CARD_NAME &&
+ if (field_type.server_type() == CREDIT_CARD_NAME &&
(section == SECTION_BILLING || section == SECTION_CC_BILLING)) {
return input.type == NAME_BILLING_FULL;
}
- return InputTypeMatchesFieldType(input, field.type());
+ return InputTypeMatchesFieldType(input, field_type);
}
-bool IsCreditCardType(AutofillFieldType type) {
+bool IsCreditCardType(ServerFieldType type) {
return AutofillType(type).group() == CREDIT_CARD;
}
@@ -155,10 +157,10 @@ bool DetailInputMatchesShippingField(const DetailInput& input,
const AutofillField& field) {
// Equivalent billing field type is used to support UseBillingAsShipping
// usecase.
- AutofillFieldType field_type =
- AutofillType::GetEquivalentBillingFieldType(field.type());
+ ServerFieldType field_type =
+ AutofillType::GetEquivalentBillingFieldType(field.Type().server_type());
- return InputTypeMatchesFieldType(input, field_type);
+ return InputTypeMatchesFieldType(input, AutofillType(field_type));
}
// Constructs |inputs| from template data.
@@ -176,14 +178,14 @@ void FillFormGroupFromOutputs(const DetailOutputMap& detail_outputs,
FormGroup* form_group) {
for (DetailOutputMap::const_iterator iter = detail_outputs.begin();
iter != detail_outputs.end(); ++iter) {
+ ServerFieldType type = iter->first->type;
if (!iter->second.empty()) {
- AutofillFieldType type = iter->first->type;
if (type == ADDRESS_HOME_COUNTRY || type == ADDRESS_BILLING_COUNTRY) {
- form_group->SetInfo(type,
+ form_group->SetInfo(AutofillType(type),
iter->second,
g_browser_process->GetApplicationLocale());
} else {
- form_group->SetRawInfo(iter->first->type, iter->second);
+ form_group->SetRawInfo(type, iter->second);
}
}
}
@@ -208,7 +210,7 @@ void GetBillingInfoFromOutputs(const DetailOutputMap& output,
} else if (it->first->type == ADDRESS_HOME_COUNTRY ||
it->first->type == ADDRESS_BILLING_COUNTRY) {
if (profile) {
- profile->SetInfo(it->first->type,
+ profile->SetInfo(AutofillType(it->first->type),
trimmed,
g_browser_process->GetApplicationLocale());
}
@@ -248,7 +250,7 @@ ui::BaseWindow* GetBaseWindowForWebContents(
// Extracts the string value of a field with |type| from |output|. This is
// useful when you only need the value of 1 input from a section of view inputs.
string16 GetValueForType(const DetailOutputMap& output,
- AutofillFieldType type) {
+ ServerFieldType type) {
for (DetailOutputMap::const_iterator it = output.begin();
it != output.end(); ++it) {
if (it->first->type == type)
@@ -314,12 +316,11 @@ bool HasCompleteAndVerifiedData(const AutofillDataModel& data_model,
if (!data_model.IsVerified())
return false;
- const std::string app_locale = g_browser_process->GetApplicationLocale();
for (size_t i = 0; i < requested_fields.size(); ++i) {
- AutofillFieldType type = requested_fields[i].type;
+ ServerFieldType type = requested_fields[i].type;
if (type != ADDRESS_HOME_LINE2 &&
type != CREDIT_CARD_VERIFICATION_CODE &&
- data_model.GetInfo(type, app_locale).empty()) {
+ data_model.GetRawInfo(type).empty()) {
return false;
}
}
@@ -849,7 +850,8 @@ DialogOverlayState AutofillDialogControllerImpl::GetDialogOverlay() const {
// First-run, post-submit, Wallet expository page.
if (full_wallet_ && full_wallet_->required_actions().empty()) {
- string16 cc_number = full_wallet_->GetInfo(CREDIT_CARD_NUMBER);
+ string16 cc_number =
+ full_wallet_->GetInfo(AutofillType(CREDIT_CARD_NUMBER));
DCHECK_EQ(16U, cc_number.size());
state.image = GetGeneratedCardImage(
ASCIIToUTF16("xxxx xxxx xxxx ") +
@@ -1197,7 +1199,7 @@ const DetailInputs& AutofillDialogControllerImpl::RequestedFieldsForSection(
}
ui::ComboboxModel* AutofillDialogControllerImpl::ComboboxModelForAutofillType(
- AutofillFieldType type) {
+ ServerFieldType type) {
switch (AutofillType::GetEquivalentFieldType(type)) {
case CREDIT_CARD_EXP_MONTH:
return &cc_exp_month_combobox_model_;
@@ -1504,7 +1506,7 @@ void AutofillDialogControllerImpl::EditCancelledForSection(
}
gfx::Image AutofillDialogControllerImpl::IconForField(
- AutofillFieldType type, const string16& user_input) const {
+ ServerFieldType type, const string16& user_input) const {
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
if (type == CREDIT_CARD_VERIFICATION_CODE)
return rb.GetImageNamed(IDR_CREDIT_CARD_CVC_HINT);
@@ -1556,7 +1558,7 @@ gfx::Image AutofillDialogControllerImpl::IconForField(
// translateable ones. TODO(groby): Also add tests.
string16 AutofillDialogControllerImpl::InputValidityMessage(
DialogSection section,
- AutofillFieldType type,
+ ServerFieldType type,
const string16& value) {
// If the field is edited, clear any Wallet errors.
if (IsPayingWithWallet()) {
@@ -1656,14 +1658,14 @@ ValidityData AutofillDialogControllerImpl::InputsAreValid(
const DetailOutputMap& inputs,
ValidationType validation_type) {
ValidityData invalid_messages;
- std::map<AutofillFieldType, string16> field_values;
+ std::map<ServerFieldType, string16> field_values;
for (DetailOutputMap::const_iterator iter = inputs.begin();
iter != inputs.end(); ++iter) {
// Skip empty fields in edit mode.
if (validation_type == VALIDATE_EDIT && iter->second.empty())
continue;
- const AutofillFieldType type = iter->first->type;
+ const ServerFieldType type = iter->first->type;
string16 message = InputValidityMessage(section, type, iter->second);
if (!message.empty())
invalid_messages[type] = message;
@@ -1749,20 +1751,20 @@ void AutofillDialogControllerImpl::UserEditedOrActivatedInput(
std::vector<string16> popup_values, popup_labels, popup_icons;
if (IsCreditCardType(input->type)) {
- GetManager()->GetCreditCardSuggestions(input->type,
+ GetManager()->GetCreditCardSuggestions(AutofillType(input->type),
field_contents,
&popup_values,
&popup_labels,
&popup_icons,
&popup_guids_);
} else {
- std::vector<AutofillFieldType> field_types;
+ std::vector<ServerFieldType> field_types;
field_types.push_back(EMAIL_ADDRESS);
for (DetailInputs::const_iterator iter = requested_shipping_fields_.begin();
iter != requested_shipping_fields_.end(); ++iter) {
field_types.push_back(iter->type);
}
- GetManager()->GetProfileSuggestions(input->type,
+ GetManager()->GetProfileSuggestions(AutofillType(input->type),
field_contents,
false,
field_types,
@@ -2324,7 +2326,7 @@ bool AutofillDialogControllerImpl::RequestingCreditCardInfo() const {
DCHECK_GT(form_structure_.field_count(), 0U);
for (size_t i = 0; i < form_structure_.field_count(); ++i) {
- if (IsCreditCardType(form_structure_.field(i)->type()))
+ if (IsCreditCardType(form_structure_.field(i)->Type().server_type()))
return true;
}
@@ -2602,7 +2604,8 @@ void AutofillDialogControllerImpl::SuggestionsUpdated() {
// Add all email addresses.
std::vector<string16> values;
- profiles[i]->GetMultiInfo(EMAIL_ADDRESS, app_locale, &values);
+ profiles[i]->GetMultiInfo(
+ AutofillType(EMAIL_ADDRESS), app_locale, &values);
for (size_t j = 0; j < values.size(); ++j) {
if (IsValidEmailAddress(values[j]))
suggested_email_.AddKeyedItem(profiles[i]->guid(), values[j]);
@@ -2783,7 +2786,7 @@ bool AutofillDialogControllerImpl::FormStructureCaresAboutSection(
void AutofillDialogControllerImpl::SetCvcResult(const string16& cvc) {
for (size_t i = 0; i < form_structure_.field_count(); ++i) {
AutofillField* field = form_structure_.field(i);
- if (field->type() == CREDIT_CARD_VERIFICATION_CODE) {
+ if (field->Type().server_type() == CREDIT_CARD_VERIFICATION_CODE) {
field->value = cvc;
break;
}
@@ -2792,12 +2795,12 @@ void AutofillDialogControllerImpl::SetCvcResult(const string16& cvc) {
string16 AutofillDialogControllerImpl::GetValueFromSection(
DialogSection section,
- AutofillFieldType type) {
+ ServerFieldType type) {
DCHECK(SectionIsActive(section));
scoped_ptr<DataModelWrapper> wrapper = CreateWrapper(section);
if (wrapper)
- return wrapper->GetInfo(type);
+ return wrapper->GetInfo(AutofillType(type));
DetailOutputMap output;
view_->GetUserInput(section, &output);
@@ -2974,7 +2977,9 @@ bool AutofillDialogControllerImpl::IsCreditCardExpirationValid(
if (base::StringToInt(month, &month_int) &&
instrument->status() ==
wallet::WalletItems::MaskedInstrument::EXPIRED &&
- year == instrument->GetInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, locale) &&
+ year ==
+ instrument->GetInfo(
+ AutofillType(CREDIT_CARD_EXP_4_DIGIT_YEAR), locale) &&
month_int == instrument->expiration_month()) {
// Otherwise, if the user is editing an instrument that's deemed expired
// by the Online Wallet server, mark it invalid on selection.
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
index 94ee787..fcc664d 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
@@ -136,17 +136,17 @@ class AutofillDialogControllerImpl : public AutofillDialogViewDelegate,
virtual const DetailInputs& RequestedFieldsForSection(DialogSection section)
const OVERRIDE;
virtual ui::ComboboxModel* ComboboxModelForAutofillType(
- AutofillFieldType type) OVERRIDE;
+ ServerFieldType type) OVERRIDE;
virtual ui::MenuModel* MenuModelForSection(DialogSection section) OVERRIDE;
virtual string16 LabelForSection(DialogSection section) const OVERRIDE;
virtual SuggestionState SuggestionStateForSection(
DialogSection section) OVERRIDE;
virtual void EditClickedForSection(DialogSection section) OVERRIDE;
virtual void EditCancelledForSection(DialogSection section) OVERRIDE;
- virtual gfx::Image IconForField(AutofillFieldType type,
+ virtual gfx::Image IconForField(ServerFieldType type,
const string16& user_input) const OVERRIDE;
virtual string16 InputValidityMessage(DialogSection section,
- AutofillFieldType type,
+ ServerFieldType type,
const string16& value) OVERRIDE;
virtual ValidityData InputsAreValid(
DialogSection section,
@@ -378,7 +378,7 @@ class AutofillDialogControllerImpl : public AutofillDialogViewDelegate,
// Gets the value for |type| in |section|, whether it comes from manual user
// input or the active suggestion.
string16 GetValueFromSection(DialogSection section,
- AutofillFieldType type);
+ ServerFieldType type);
// Saves the data in |profile| to the personal data manager. This may add
// a new profile or tack onto an existing profile.
@@ -410,7 +410,7 @@ class AutofillDialogControllerImpl : public AutofillDialogViewDelegate,
// Identifying info is loaded into the last three outparams as well as
// |popup_guids_|.
void GetProfileSuggestions(
- AutofillFieldType type,
+ ServerFieldType type,
const string16& field_contents,
const DetailInputs& inputs,
std::vector<string16>* popup_values,
@@ -686,7 +686,7 @@ class AutofillDialogControllerImpl : public AutofillDialogViewDelegate,
// Whether |callback_| was Run() with a filled |form_structure_|.
bool data_was_passed_back_;
- typedef std::map<AutofillFieldType,
+ typedef std::map<ServerFieldType,
std::pair<base::string16, base::string16> > TypeErrorInputMap;
typedef std::map<DialogSection, TypeErrorInputMap> WalletValidationErrors;
// Wallet validation errors. section->type->(error_msg, input_value).
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
index 1db6496..a510a96 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
@@ -86,7 +86,7 @@ const char kTestCCNumberInvalid[] = "4111111111111112";
void SetOutputValue(const DetailInputs& inputs,
DetailOutputMap* outputs,
- AutofillFieldType type,
+ ServerFieldType type,
const base::string16& value) {
for (size_t i = 0; i < inputs.size(); ++i) {
const DetailInput& input = inputs[i];
@@ -517,10 +517,10 @@ TEST_F(AutofillDialogControllerTest, PhoneNumberValidation) {
controller()->GetTestingManager()->AddTestingProfile(&full_profile);
for (size_t i = 0; i < 2; ++i) {
- AutofillFieldType phone = i == 0 ? PHONE_HOME_WHOLE_NUMBER :
- PHONE_BILLING_WHOLE_NUMBER;
- AutofillFieldType address = i == 0 ? ADDRESS_HOME_COUNTRY :
- ADDRESS_BILLING_COUNTRY;
+ ServerFieldType phone = i == 0 ? PHONE_HOME_WHOLE_NUMBER :
+ PHONE_BILLING_WHOLE_NUMBER;
+ ServerFieldType address = i == 0 ? ADDRESS_HOME_COUNTRY :
+ ADDRESS_BILLING_COUNTRY;
DialogSection section = i == 0 ? SECTION_SHIPPING : SECTION_BILLING;
controller()->EditClickedForSection(section);
@@ -1011,19 +1011,22 @@ TEST_F(AutofillDialogControllerTest, DontUseBillingAsShipping) {
controller()->OnAccept();
ASSERT_EQ(20U, form_structure()->field_count());
- EXPECT_EQ(ADDRESS_BILLING_STATE, form_structure()->field(9)->type());
- EXPECT_EQ(ADDRESS_HOME_STATE, form_structure()->field(16)->type());
+ EXPECT_EQ(ADDRESS_BILLING_STATE,
+ form_structure()->field(9)->Type().server_type());
+ EXPECT_EQ(ADDRESS_HOME_STATE,
+ form_structure()->field(16)->Type().server_type());
string16 billing_state = form_structure()->field(9)->value;
string16 shipping_state = form_structure()->field(16)->value;
EXPECT_FALSE(billing_state.empty());
EXPECT_FALSE(shipping_state.empty());
EXPECT_NE(billing_state, shipping_state);
- EXPECT_EQ(CREDIT_CARD_NAME, form_structure()->field(1)->type());
+ EXPECT_EQ(CREDIT_CARD_NAME, form_structure()->field(1)->Type().server_type());
string16 cc_name = form_structure()->field(1)->value;
- EXPECT_EQ(NAME_BILLING_FULL, form_structure()->field(6)->type());
+ EXPECT_EQ(NAME_BILLING_FULL,
+ form_structure()->field(6)->Type().server_type());
string16 billing_name = form_structure()->field(6)->value;
- EXPECT_EQ(NAME_FULL, form_structure()->field(13)->type());
+ EXPECT_EQ(NAME_FULL, form_structure()->field(13)->Type().server_type());
string16 shipping_name = form_structure()->field(13)->value;
EXPECT_FALSE(cc_name.empty());
@@ -1048,19 +1051,23 @@ TEST_F(AutofillDialogControllerTest, UseBillingAsShipping) {
controller()->OnAccept();
ASSERT_EQ(20U, form_structure()->field_count());
- EXPECT_EQ(ADDRESS_BILLING_STATE, form_structure()->field(9)->type());
- EXPECT_EQ(ADDRESS_HOME_STATE, form_structure()->field(16)->type());
+ EXPECT_EQ(ADDRESS_BILLING_STATE,
+ form_structure()->field(9)->Type().server_type());
+ EXPECT_EQ(ADDRESS_HOME_STATE,
+ form_structure()->field(16)->Type().server_type());
string16 billing_state = form_structure()->field(9)->value;
string16 shipping_state = form_structure()->field(16)->value;
EXPECT_FALSE(billing_state.empty());
EXPECT_FALSE(shipping_state.empty());
EXPECT_EQ(billing_state, shipping_state);
- EXPECT_EQ(CREDIT_CARD_NAME, form_structure()->field(1)->type());
+ EXPECT_EQ(CREDIT_CARD_NAME,
+ form_structure()->field(1)->Type().server_type());
string16 cc_name = form_structure()->field(1)->value;
- EXPECT_EQ(NAME_BILLING_FULL, form_structure()->field(6)->type());
+ EXPECT_EQ(NAME_BILLING_FULL,
+ form_structure()->field(6)->Type().server_type());
string16 billing_name = form_structure()->field(6)->value;
- EXPECT_EQ(NAME_FULL, form_structure()->field(13)->type());
+ EXPECT_EQ(NAME_FULL, form_structure()->field(13)->Type().server_type());
string16 shipping_name = form_structure()->field(13)->value;
EXPECT_FALSE(cc_name.empty());
@@ -1097,8 +1104,10 @@ TEST_F(AutofillDialogControllerTest, BillingVsShippingPhoneNumber) {
controller()->OnAccept();
ASSERT_EQ(2U, form_structure()->field_count());
- EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, form_structure()->field(0)->type());
- EXPECT_EQ(PHONE_BILLING_WHOLE_NUMBER, form_structure()->field(1)->type());
+ EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER,
+ form_structure()->field(0)->Type().server_type());
+ EXPECT_EQ(PHONE_BILLING_WHOLE_NUMBER,
+ form_structure()->field(1)->Type().server_type());
EXPECT_EQ(shipping_profile.GetRawInfo(PHONE_HOME_WHOLE_NUMBER),
form_structure()->field(0)->value);
EXPECT_EQ(billing_profile.GetRawInfo(PHONE_BILLING_WHOLE_NUMBER),
@@ -1497,7 +1506,7 @@ TEST_F(AutofillDialogControllerTest, EditAutofillProfile) {
const DetailInput& input = inputs[i];
EXPECT_EQ(input.type == NAME_FULL ? ASCIIToUTF16("Edited Name") :
input.initial_value,
- edited_profile.GetInfo(input.type, "en-US"));
+ edited_profile.GetInfo(AutofillType(input.type), "en-US"));
}
}
@@ -1521,7 +1530,7 @@ TEST_F(AutofillDialogControllerTest, AddAutofillProfile) {
AutofillProfile full_profile2(test::GetVerifiedProfile2());
for (size_t i = 0; i < inputs.size(); ++i) {
const DetailInput& input = inputs[i];
- outputs[&input] = full_profile2.GetInfo(input.type, "en-US");
+ outputs[&input] = full_profile2.GetInfo(AutofillType(input.type), "en-US");
}
controller()->GetView()->SetUserInput(SECTION_BILLING, outputs);
@@ -1533,16 +1542,17 @@ TEST_F(AutofillDialogControllerTest, AddAutofillProfile) {
controller()->RequestedFieldsForSection(SECTION_SHIPPING);
for (size_t i = 0; i < shipping_inputs.size(); ++i) {
const DetailInput& input = shipping_inputs[i];
- EXPECT_EQ(full_profile2.GetInfo(input.type, "en-US"),
- added_profile.GetInfo(input.type, "en-US"));
+ EXPECT_EQ(full_profile2.GetInfo(AutofillType(input.type), "en-US"),
+ added_profile.GetInfo(AutofillType(input.type), "en-US"));
}
// Also, the currently selected email address should get added to the new
// profile.
- string16 original_email = full_profile.GetInfo(EMAIL_ADDRESS, "en-US");
+ string16 original_email =
+ full_profile.GetInfo(AutofillType(EMAIL_ADDRESS), "en-US");
EXPECT_FALSE(original_email.empty());
EXPECT_EQ(original_email,
- added_profile.GetInfo(EMAIL_ADDRESS, "en-US"));
+ added_profile.GetInfo(AutofillType(EMAIL_ADDRESS), "en-US"));
}
// Makes sure that a newly added email address gets added to an existing profile
@@ -1570,7 +1580,8 @@ TEST_F(AutofillDialogControllerTest, AddEmail) {
FillCreditCardInputs();
controller()->OnAccept();
std::vector<base::string16> email_values;
- full_profile.GetMultiInfo(EMAIL_ADDRESS, "en-US", &email_values);
+ full_profile.GetMultiInfo(
+ AutofillType(EMAIL_ADDRESS), "en-US", &email_values);
ASSERT_EQ(2U, email_values.size());
EXPECT_EQ(new_email, email_values[1]);
}
@@ -2030,7 +2041,7 @@ TEST_F(AutofillDialogControllerTest, HideWalletEmail) {
size_t i = 0;
for (; i < form_structure()->field_count(); ++i) {
- if (form_structure()->field(i)->type() == EMAIL_ADDRESS) {
+ if (form_structure()->field(i)->Type().server_type() == EMAIL_ADDRESS) {
EXPECT_EQ(ASCIIToUTF16(kFakeEmail), form_structure()->field(i)->value);
break;
}
@@ -2045,10 +2056,13 @@ TEST_F(AutofillDialogControllerTest, AutofillTypes) {
controller()->OnAccept();
controller()->OnDidGetFullWallet(wallet::GetTestFullWallet());
ASSERT_EQ(20U, form_structure()->field_count());
- EXPECT_EQ(EMAIL_ADDRESS, form_structure()->field(0)->type());
- EXPECT_EQ(CREDIT_CARD_NUMBER, form_structure()->field(2)->type());
- EXPECT_EQ(ADDRESS_BILLING_STATE, form_structure()->field(9)->type());
- EXPECT_EQ(ADDRESS_HOME_STATE, form_structure()->field(16)->type());
+ EXPECT_EQ(EMAIL_ADDRESS, form_structure()->field(0)->Type().server_type());
+ EXPECT_EQ(CREDIT_CARD_NUMBER,
+ form_structure()->field(2)->Type().server_type());
+ EXPECT_EQ(ADDRESS_BILLING_STATE,
+ form_structure()->field(9)->Type().server_type());
+ EXPECT_EQ(ADDRESS_HOME_STATE,
+ form_structure()->field(16)->Type().server_type());
}
TEST_F(AutofillDialogControllerTest, SaveDetailsInChrome) {
@@ -2223,7 +2237,7 @@ TEST_F(AutofillDialogControllerTest, WalletExpiredCard) {
EXPECT_TRUE(controller()->IsEditingExistingData(SECTION_CC_BILLING));
- // Use |SetOutputValue()| to put the right AutofillFieldTypes into the map.
+ // Use |SetOutputValue()| to put the right ServerFieldTypes into the map.
const DetailInputs& inputs =
controller()->RequestedFieldsForSection(SECTION_CC_BILLING);
DetailOutputMap outputs;
diff --git a/chrome/browser/ui/autofill/autofill_dialog_types.h b/chrome/browser/ui/autofill/autofill_dialog_types.h
index 94f312b..c31b0d7 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_types.h
+++ b/chrome/browser/ui/autofill/autofill_dialog_types.h
@@ -38,7 +38,7 @@ struct DetailInput {
// kBillingInputs. If negative, don't show the input at all (leave it hidden
// at all times).
int row_id;
- AutofillFieldType type;
+ ServerFieldType type;
// Placeholder text resource ID.
int placeholder_text_rid;
// A number between 0 and 1.0 that describes how much of the horizontal space
@@ -234,7 +234,7 @@ enum ValidationType {
typedef std::vector<DetailInput> DetailInputs;
typedef std::map<const DetailInput*, string16> DetailOutputMap;
-typedef std::map<AutofillFieldType, string16> ValidityData;
+typedef std::map<ServerFieldType, string16> ValidityData;
// Returns the AutofillMetrics::DIALOG_UI_*_EDIT_UI_SHOWN metric corresponding
// to the |section|.
diff --git a/chrome/browser/ui/autofill/autofill_dialog_view_delegate.h b/chrome/browser/ui/autofill/autofill_dialog_view_delegate.h
index b77be10..d67f9d7 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_view_delegate.h
+++ b/chrome/browser/ui/autofill/autofill_dialog_view_delegate.h
@@ -104,7 +104,7 @@ class AutofillDialogViewDelegate {
// Returns the combobox model for inputs of type |type|, or NULL if the input
// should be a text field.
virtual ui::ComboboxModel* ComboboxModelForAutofillType(
- AutofillFieldType type) = 0;
+ ServerFieldType type) = 0;
// Returns the model for suggestions for fields that fall under |section|.
// This may return NULL, in which case no menu should be shown for that
@@ -125,14 +125,14 @@ class AutofillDialogViewDelegate {
// Returns an icon to be displayed along with the input for the given type.
// |user_input| is the current text in the textfield.
- virtual gfx::Image IconForField(AutofillFieldType type,
+ virtual gfx::Image IconForField(ServerFieldType type,
const string16& user_input) const = 0;
// Decides whether input of |value| is valid for a field of type |type|. If
// valid, the returned string will be empty. Otherwise it will contain an
// error message.
virtual string16 InputValidityMessage(DialogSection section,
- AutofillFieldType type,
+ ServerFieldType type,
const string16& value) = 0;
diff --git a/chrome/browser/ui/autofill/data_model_wrapper.cc b/chrome/browser/ui/autofill/data_model_wrapper.cc
index b1a1f76..ac1af54 100644
--- a/chrome/browser/ui/autofill/data_model_wrapper.cc
+++ b/chrome/browser/ui/autofill/data_model_wrapper.cc
@@ -26,14 +26,16 @@ DataModelWrapper::~DataModelWrapper() {}
string16 DataModelWrapper::GetDisplayText() {
string16 comma = ASCIIToUTF16(", ");
- string16 label = GetInfo(NAME_FULL) + comma + GetInfo(ADDRESS_HOME_LINE1);
- string16 address2 = GetInfo(ADDRESS_HOME_LINE2);
+ string16 label =
+ GetInfo(AutofillType(NAME_FULL)) + comma +
+ GetInfo(AutofillType(ADDRESS_HOME_LINE1));
+ string16 address2 = GetInfo(AutofillType(ADDRESS_HOME_LINE2));
if (!address2.empty())
label += comma + address2;
label += ASCIIToUTF16("\n") +
- GetInfo(ADDRESS_HOME_CITY) + comma +
- GetInfo(ADDRESS_HOME_STATE) + ASCIIToUTF16(" ") +
- GetInfo(ADDRESS_HOME_ZIP);
+ GetInfo(AutofillType(ADDRESS_HOME_CITY)) + comma +
+ GetInfo(AutofillType(ADDRESS_HOME_STATE)) + ASCIIToUTF16(" ") +
+ GetInfo(AutofillType(ADDRESS_HOME_ZIP));
return label;
}
@@ -57,12 +59,12 @@ bool DataModelWrapper::FillFormStructure(
void DataModelWrapper::FillInputs(DetailInputs* inputs) {
for (size_t i = 0; i < inputs->size(); ++i) {
- (*inputs)[i].initial_value = GetInfo((*inputs)[i].type);
+ (*inputs)[i].initial_value = GetInfo(AutofillType((*inputs)[i].type));
}
}
void DataModelWrapper::FillFormField(AutofillField* field) const {
- field->value = GetInfo(field->type());
+ field->value = GetInfo(field->Type());
}
DataModelWrapper::DataModelWrapper() {}
@@ -76,7 +78,7 @@ gfx::Image DataModelWrapper::GetIcon() {
EmptyDataModelWrapper::EmptyDataModelWrapper() {}
EmptyDataModelWrapper::~EmptyDataModelWrapper() {}
-string16 EmptyDataModelWrapper::GetInfo(AutofillFieldType type) const {
+string16 EmptyDataModelWrapper::GetInfo(const AutofillType& type) const {
return string16();
}
@@ -92,7 +94,7 @@ AutofillDataModelWrapper::AutofillDataModelWrapper(
AutofillDataModelWrapper::~AutofillDataModelWrapper() {}
-string16 AutofillDataModelWrapper::GetInfo(AutofillFieldType type) const {
+string16 AutofillDataModelWrapper::GetInfo(const AutofillType& type) const {
return data_model_->GetInfo(type, g_browser_process->GetApplicationLocale());
}
@@ -114,15 +116,16 @@ void AutofillProfileWrapper::FillInputs(DetailInputs* inputs) {
const std::string app_locale = g_browser_process->GetApplicationLocale();
for (size_t j = 0; j < inputs->size(); ++j) {
std::vector<string16> values;
- profile_->GetMultiInfo((*inputs)[j].type, app_locale, &values);
+ profile_->GetMultiInfo(
+ AutofillType((*inputs)[j].type), app_locale, &values);
(*inputs)[j].initial_value = values[variant()];
}
}
void AutofillProfileWrapper::FillFormField(AutofillField* field) const {
- AutofillFieldType field_type = field->type();
+ AutofillType field_type = field->Type();
- if (field_type == CREDIT_CARD_NAME) {
+ if (field_type.server_type() == CREDIT_CARD_NAME) {
// Requests for the user's credit card are filled from the billing address,
// but the AutofillProfile class doesn't know how to fill credit card
// fields. So, temporarily set the type to the corresponding profile type.
@@ -131,7 +134,7 @@ void AutofillProfileWrapper::FillFormField(AutofillField* field) const {
AutofillDataModelWrapper::FillFormField(field);
- field->set_heuristic_type(field_type);
+ field->set_heuristic_type(field_type.server_type());
}
// AutofillCreditCardWrapper
@@ -142,8 +145,8 @@ AutofillCreditCardWrapper::AutofillCreditCardWrapper(const CreditCard* card)
AutofillCreditCardWrapper::~AutofillCreditCardWrapper() {}
-string16 AutofillCreditCardWrapper::GetInfo(AutofillFieldType type) const {
- if (type == CREDIT_CARD_EXP_MONTH)
+string16 AutofillCreditCardWrapper::GetInfo(const AutofillType& type) const {
+ if (type.server_type() == CREDIT_CARD_EXP_MONTH)
return MonthComboboxModel::FormatMonth(card_->expiration_month());
return AutofillDataModelWrapper::GetInfo(type);
@@ -168,13 +171,13 @@ WalletAddressWrapper::WalletAddressWrapper(
WalletAddressWrapper::~WalletAddressWrapper() {}
-string16 WalletAddressWrapper::GetInfo(AutofillFieldType type) const {
+string16 WalletAddressWrapper::GetInfo(const AutofillType& type) const {
return address_->GetInfo(type, g_browser_process->GetApplicationLocale());
}
string16 WalletAddressWrapper::GetDisplayText() {
if (!address_->is_complete_address() ||
- GetInfo(PHONE_HOME_WHOLE_NUMBER).empty()) {
+ GetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER)).empty()) {
return string16();
}
@@ -189,8 +192,8 @@ WalletInstrumentWrapper::WalletInstrumentWrapper(
WalletInstrumentWrapper::~WalletInstrumentWrapper() {}
-string16 WalletInstrumentWrapper::GetInfo(AutofillFieldType type) const {
- if (type == CREDIT_CARD_EXP_MONTH)
+string16 WalletInstrumentWrapper::GetInfo(const AutofillType& type) const {
+ if (type.server_type() == CREDIT_CARD_EXP_MONTH)
return MonthComboboxModel::FormatMonth(instrument_->expiration_month());
return instrument_->GetInfo(type, g_browser_process->GetApplicationLocale());
@@ -204,7 +207,7 @@ string16 WalletInstrumentWrapper::GetDisplayText() {
// TODO(dbeam): handle other instrument statuses? http://crbug.com/233048
if (instrument_->status() == wallet::WalletItems::MaskedInstrument::EXPIRED ||
!instrument_->address().is_complete_address() ||
- GetInfo(PHONE_HOME_WHOLE_NUMBER).empty()) {
+ GetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER)).empty()) {
return string16();
}
@@ -224,11 +227,11 @@ FullWalletBillingWrapper::FullWalletBillingWrapper(
FullWalletBillingWrapper::~FullWalletBillingWrapper() {}
-string16 FullWalletBillingWrapper::GetInfo(AutofillFieldType type) const {
- if (type == CREDIT_CARD_EXP_MONTH)
+string16 FullWalletBillingWrapper::GetInfo(const AutofillType& type) const {
+ if (type.server_type() == CREDIT_CARD_EXP_MONTH)
return MonthComboboxModel::FormatMonth(full_wallet_->expiration_month());
- if (AutofillType(type).group() == CREDIT_CARD)
+ if (type.group() == CREDIT_CARD)
return full_wallet_->GetInfo(type);
return full_wallet_->billing_address()->GetInfo(
@@ -253,7 +256,7 @@ FullWalletShippingWrapper::FullWalletShippingWrapper(
FullWalletShippingWrapper::~FullWalletShippingWrapper() {}
-string16 FullWalletShippingWrapper::GetInfo(AutofillFieldType type) const {
+string16 FullWalletShippingWrapper::GetInfo(const AutofillType& type) const {
return full_wallet_->shipping_address()->GetInfo(
type, g_browser_process->GetApplicationLocale());
}
@@ -263,10 +266,10 @@ DetailOutputWrapper::DetailOutputWrapper(const DetailOutputMap& outputs)
DetailOutputWrapper::~DetailOutputWrapper() {}
-base::string16 DetailOutputWrapper::GetInfo(AutofillFieldType type) const {
+base::string16 DetailOutputWrapper::GetInfo(const AutofillType& type) const {
for (DetailOutputMap::const_iterator it = outputs_.begin();
it != outputs_.end(); ++it) {
- if (type == it->first->type)
+ if (type.server_type() == it->first->type)
return it->second;
}
return base::string16();
diff --git a/chrome/browser/ui/autofill/data_model_wrapper.h b/chrome/browser/ui/autofill/data_model_wrapper.h
index 8fbcd97..4d1c9a4 100644
--- a/chrome/browser/ui/autofill/data_model_wrapper.h
+++ b/chrome/browser/ui/autofill/data_model_wrapper.h
@@ -9,7 +9,6 @@
#include "base/strings/string16.h"
#include "chrome/browser/ui/autofill/autofill_dialog_types.h"
#include "components/autofill/content/browser/wallet/wallet_items.h"
-#include "components/autofill/core/browser/field_types.h"
namespace gfx {
class Image;
@@ -19,6 +18,7 @@ namespace autofill {
class AutofillDataModel;
class AutofillProfile;
+class AutofillType;
class CreditCard;
class FormStructure;
@@ -35,7 +35,7 @@ class DataModelWrapper {
virtual ~DataModelWrapper();
// Returns the data for a specific autocomplete type.
- virtual string16 GetInfo(AutofillFieldType type) const = 0;
+ virtual string16 GetInfo(const AutofillType& type) const = 0;
// Returns the icon, if any, that represents this model.
virtual gfx::Image GetIcon();
@@ -74,7 +74,7 @@ class EmptyDataModelWrapper : public DataModelWrapper {
EmptyDataModelWrapper();
virtual ~EmptyDataModelWrapper();
- virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
+ virtual string16 GetInfo(const AutofillType& type) const OVERRIDE;
protected:
virtual void FillFormField(AutofillField* field) const OVERRIDE;
@@ -88,7 +88,7 @@ class AutofillDataModelWrapper : public DataModelWrapper {
AutofillDataModelWrapper(const AutofillDataModel* data_model, size_t variant);
virtual ~AutofillDataModelWrapper();
- virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
+ virtual string16 GetInfo(const AutofillType& type) const OVERRIDE;
protected:
virtual void FillFormField(AutofillField* field) const OVERRIDE;
@@ -124,7 +124,7 @@ class AutofillCreditCardWrapper : public AutofillDataModelWrapper {
explicit AutofillCreditCardWrapper(const CreditCard* card);
virtual ~AutofillCreditCardWrapper();
- virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
+ virtual string16 GetInfo(const AutofillType& type) const OVERRIDE;
virtual gfx::Image GetIcon() OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
@@ -140,7 +140,7 @@ class WalletAddressWrapper : public DataModelWrapper {
explicit WalletAddressWrapper(const wallet::Address* address);
virtual ~WalletAddressWrapper();
- virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
+ virtual string16 GetInfo(const AutofillType& type) const OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
private:
@@ -156,7 +156,7 @@ class WalletInstrumentWrapper : public DataModelWrapper {
const wallet::WalletItems::MaskedInstrument* instrument);
virtual ~WalletInstrumentWrapper();
- virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
+ virtual string16 GetInfo(const AutofillType& type) const OVERRIDE;
virtual gfx::Image GetIcon() OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
@@ -172,7 +172,7 @@ class FullWalletBillingWrapper : public DataModelWrapper {
explicit FullWalletBillingWrapper(wallet::FullWallet* full_wallet);
virtual ~FullWalletBillingWrapper();
- virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
+ virtual string16 GetInfo(const AutofillType& type) const OVERRIDE;
virtual string16 GetDisplayText() OVERRIDE;
private:
@@ -187,7 +187,7 @@ class FullWalletShippingWrapper : public DataModelWrapper {
explicit FullWalletShippingWrapper(wallet::FullWallet* full_wallet);
virtual ~FullWalletShippingWrapper();
- virtual string16 GetInfo(AutofillFieldType type) const OVERRIDE;
+ virtual string16 GetInfo(const AutofillType& type) const OVERRIDE;
private:
wallet::FullWallet* full_wallet_;
@@ -201,7 +201,7 @@ class DetailOutputWrapper : public DataModelWrapper {
explicit DetailOutputWrapper(const DetailOutputMap& outputs);
virtual ~DetailOutputWrapper();
- virtual base::string16 GetInfo(AutofillFieldType type) const OVERRIDE;
+ virtual base::string16 GetInfo(const AutofillType& type) const OVERRIDE;
private:
const DetailOutputMap& outputs_;
diff --git a/chrome/browser/ui/autofill/data_model_wrapper_unittest.cc b/chrome/browser/ui/autofill/data_model_wrapper_unittest.cc
index a1f27ce..724548a 100644
--- a/chrome/browser/ui/autofill/data_model_wrapper_unittest.cc
+++ b/chrome/browser/ui/autofill/data_model_wrapper_unittest.cc
@@ -23,7 +23,8 @@ TEST(AutofillCreditCardWrapperTest, GetInfoCreditCardExpMonth) {
for (int month = 1; month <= 12; ++month) {
card.SetRawInfo(CREDIT_CARD_EXP_MONTH, base::IntToString16(month));
AutofillCreditCardWrapper wrapper(&card);
- EXPECT_EQ(model.GetItemAt(month), wrapper.GetInfo(CREDIT_CARD_EXP_MONTH));
+ EXPECT_EQ(model.GetItemAt(month),
+ wrapper.GetInfo(AutofillType(CREDIT_CARD_EXP_MONTH)));
}
}
@@ -61,7 +62,8 @@ TEST(WalletInstrumentWrapperTest, GetInfoCreditCardExpMonth) {
for (int month = 1; month <= 12; ++month) {
instrument->expiration_month_ = month;
WalletInstrumentWrapper wrapper(instrument.get());
- EXPECT_EQ(model.GetItemAt(month), wrapper.GetInfo(CREDIT_CARD_EXP_MONTH));
+ EXPECT_EQ(model.GetItemAt(month),
+ wrapper.GetInfo(AutofillType(CREDIT_CARD_EXP_MONTH)));
}
}
@@ -86,10 +88,13 @@ TEST(DataModelWrapperTest, GetDisplayTextEmptyWithoutPhone) {
const_cast<wallet::Address*>(&instrument->address())->set_phone_number(
string16());
- ASSERT_TRUE(instrument_wrapper.GetInfo(PHONE_HOME_WHOLE_NUMBER).empty());
+ ASSERT_TRUE(
+ instrument_wrapper.GetInfo(
+ AutofillType(PHONE_HOME_WHOLE_NUMBER)).empty());
EXPECT_TRUE(instrument_wrapper.GetDisplayText().empty());
- ASSERT_TRUE(address_wrapper.GetInfo(PHONE_HOME_WHOLE_NUMBER).empty());
+ ASSERT_TRUE(
+ address_wrapper.GetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER)).empty());
EXPECT_TRUE(address_wrapper.GetDisplayText().empty());
}
diff --git a/chrome/browser/ui/autofill/mock_autofill_dialog_view_delegate.h b/chrome/browser/ui/autofill/mock_autofill_dialog_view_delegate.h
index e5f564f..a02c32c 100644
--- a/chrome/browser/ui/autofill/mock_autofill_dialog_view_delegate.h
+++ b/chrome/browser/ui/autofill/mock_autofill_dialog_view_delegate.h
@@ -39,16 +39,16 @@ class MockAutofillDialogViewDelegate : public AutofillDialogViewDelegate {
MOCK_CONST_METHOD1(RequestedFieldsForSection,
const DetailInputs&(DialogSection));
MOCK_METHOD1(ComboboxModelForAutofillType,
- ui::ComboboxModel*(AutofillFieldType));
+ ui::ComboboxModel*(ServerFieldType));
MOCK_METHOD1(MenuModelForSection, ui::MenuModel*(DialogSection));
MOCK_CONST_METHOD1(LabelForSection, string16(DialogSection section));
MOCK_METHOD1(SuggestionStateForSection, SuggestionState(DialogSection));
MOCK_METHOD1(EditClickedForSection, void(DialogSection section));
MOCK_METHOD1(EditCancelledForSection, void(DialogSection section));
MOCK_CONST_METHOD2(IconForField,
- gfx::Image(AutofillFieldType, const string16&));
+ gfx::Image(ServerFieldType, const string16&));
MOCK_METHOD3(InputValidityMessage,
- string16(DialogSection, AutofillFieldType, const string16&));
+ string16(DialogSection, ServerFieldType, const string16&));
MOCK_METHOD3(InputsAreValid, ValidityData(DialogSection,
const DetailOutputMap&,
ValidationType));
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_section_container.h b/chrome/browser/ui/cocoa/autofill/autofill_section_container.h
index e7ca258..a8c063c 100644
--- a/chrome/browser/ui/cocoa/autofill/autofill_section_container.h
+++ b/chrome/browser/ui/cocoa/autofill/autofill_section_container.h
@@ -86,7 +86,7 @@ namespace autofill {
@interface AutofillSectionContainer (ForTesting)
// Retrieve the field associated with the given type.
-- (NSControl<AutofillInputField>*)getField:(autofill::AutofillFieldType)type;
+- (NSControl<AutofillInputField>*)getField:(autofill::ServerFieldType)type;
// Sets the value for the field matching |input|. Does nothing if the field is
// not part of this section.
diff --git a/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm b/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
index a742633..427f4ac 100644
--- a/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
+++ b/chrome/browser/ui/cocoa/autofill/autofill_section_container.mm
@@ -72,7 +72,7 @@ void BreakSuggestionText(const string16& text,
// Autofill data comes from an AutofillProfile, leave the comboboxes alone.
// TODO(groby): This kind of logic should _really_ live on the delegate.
bool ShouldOverwriteComboboxes(autofill::DialogSection section,
- autofill::AutofillFieldType type) {
+ autofill::ServerFieldType type) {
if (autofill::AutofillType(type).group() != autofill::CREDIT_CARD) {
return false;
}
@@ -102,11 +102,11 @@ bool CompareInputRows(const autofill::DetailInput* input1,
edited:(BOOL)edited;
// Convenience method to retrieve a field type via the control's tag.
-- (autofill::AutofillFieldType)fieldTypeForControl:(NSControl*)control;
+- (autofill::ServerFieldType)fieldTypeForControl:(NSControl*)control;
// Find the DetailInput* associated with a field type.
- (const autofill::DetailInput*)detailInputForType:
- (autofill::AutofillFieldType)type;
+ (autofill::ServerFieldType)type;
// Takes an NSArray of controls and builds a DetailOutputMap from them.
// Translates between Cocoa code and delegate, essentially.
@@ -323,7 +323,7 @@ bool CompareInputRows(const autofill::DetailInput* input1,
AutofillPopUpButton* popup =
base::mac::ObjCCast<AutofillPopUpButton>(control);
if (popup) {
- autofill::AutofillFieldType fieldType =
+ autofill::ServerFieldType fieldType =
[self fieldTypeForControl:popup];
if (autofill::AutofillType(fieldType).group() ==
autofill::CREDIT_CARD) {
@@ -363,7 +363,7 @@ bool CompareInputRows(const autofill::DetailInput* input1,
section_, detailOutputs, validationType);
for (NSControl<AutofillInputField>* input in fields) {
- const autofill::AutofillFieldType type = [self fieldTypeForControl:input];
+ const autofill::ServerFieldType type = [self fieldTypeForControl:input];
if (invalidInputs.count(type))
[input setValidityMessage:base::SysUTF16ToNSString(invalidInputs[type])];
else
@@ -385,7 +385,7 @@ bool CompareInputRows(const autofill::DetailInput* input1,
if (!textfield)
return;
- autofill::AutofillFieldType type = [self fieldTypeForControl:field];
+ autofill::ServerFieldType type = [self fieldTypeForControl:field];
string16 fieldValue = base::SysNSStringToUTF16([textfield fieldValue]);
// Get the frame rectangle for the designated field, in screen coordinates.
@@ -431,13 +431,13 @@ bool CompareInputRows(const autofill::DetailInput* input1,
}
}
-- (autofill::AutofillFieldType)fieldTypeForControl:(NSControl*)control {
+- (autofill::ServerFieldType)fieldTypeForControl:(NSControl*)control {
DCHECK([control tag]);
- return static_cast<autofill::AutofillFieldType>([control tag]);
+ return static_cast<autofill::ServerFieldType>([control tag]);
}
- (const autofill::DetailInput*)detailInputForType:
- (autofill::AutofillFieldType)type {
+ (autofill::ServerFieldType)type {
for (size_t i = 0; i < detailInputs_.size(); ++i) {
if (detailInputs_[i]->type == type)
return detailInputs_[i];
@@ -452,7 +452,7 @@ bool CompareInputRows(const autofill::DetailInput* input1,
for (NSControl<AutofillInputField>* input in controls) {
DCHECK([input isKindOfClass:[NSControl class]]);
DCHECK([input conformsToProtocol:@protocol(AutofillInputField)]);
- autofill::AutofillFieldType fieldType = [self fieldTypeForControl:input];
+ autofill::ServerFieldType fieldType = [self fieldTypeForControl:input];
DCHECK([self detailInputForType:fieldType]);
NSString* value = [input fieldValue];
outputs->insert(std::make_pair([self detailInputForType:fieldType],
@@ -604,7 +604,7 @@ bool CompareInputRows(const autofill::DetailInput* input1,
@implementation AutofillSectionContainer (ForTesting)
-- (NSControl*)getField:(autofill::AutofillFieldType)type {
+- (NSControl*)getField:(autofill::ServerFieldType)type {
return [inputs_ viewWithTag:type];
}
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
index 0b7df2e..85c46de 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
@@ -2022,7 +2022,7 @@ void AutofillDialogViews::MarkInputsInvalid(DialogSection section,
DetailsGroup* group = GroupForSection(section);
DCHECK(group->container->visible());
- typedef std::map<AutofillFieldType,
+ typedef std::map<ServerFieldType,
base::Callback<void(const base::string16&)> > FieldMap;
FieldMap field_map;
@@ -2139,8 +2139,8 @@ void AutofillDialogViews::TextfieldEditedOrActivated(
DetailsGroup* group = GroupForView(textfield);
DCHECK(group);
- // Figure out the AutofillFieldType this textfield represents.
- AutofillFieldType type = UNKNOWN_TYPE;
+ // Figure out the ServerFieldType this textfield represents.
+ ServerFieldType type = UNKNOWN_TYPE;
DecoratedTextfield* decorated = NULL;
// Look for the input in the manual inputs.
diff --git a/chrome/browser/ui/webui/options/autofill_options_handler.cc b/chrome/browser/ui/webui/options/autofill_options_handler.cc
index e00af5c..f2dad23 100644
--- a/chrome/browser/ui/webui/options/autofill_options_handler.cc
+++ b/chrome/browser/ui/webui/options/autofill_options_handler.cc
@@ -32,7 +32,7 @@
#include "ui/webui/web_ui_util.h"
using autofill::AutofillCountry;
-using autofill::AutofillFieldType;
+using autofill::ServerFieldType;
using autofill::AutofillProfile;
using autofill::CreditCard;
using autofill::PersonalDataManager;
@@ -77,7 +77,7 @@ void SetCountryData(DictionaryValue* localized_strings) {
// Get the multi-valued element for |type| and return it in |ListValue| form.
void GetValueList(const AutofillProfile& profile,
- AutofillFieldType type,
+ ServerFieldType type,
scoped_ptr<ListValue>* list) {
list->reset(new ListValue);
@@ -95,7 +95,7 @@ void GetValueList(const AutofillProfile& profile,
// Set the multi-valued element for |type| from input |list| values.
void SetValueList(const ListValue* list,
- AutofillFieldType type,
+ ServerFieldType type,
AutofillProfile* profile) {
std::vector<string16> values(list->GetSize());
for (size_t i = 0; i < list->GetSize(); ++i) {
diff --git a/chrome/browser/webdata/autofill_profile_syncable_service.cc b/chrome/browser/webdata/autofill_profile_syncable_service.cc
index 530f390..e97a4ed 100644
--- a/chrome/browser/webdata/autofill_profile_syncable_service.cc
+++ b/chrome/browser/webdata/autofill_profile_syncable_service.cc
@@ -20,7 +20,7 @@
#include "sync/protocol/sync.pb.h"
using autofill::AutofillCountry;
-using autofill::AutofillFieldType;
+using autofill::ServerFieldType;
using autofill::AutofillProfile;
using autofill::AutofillProfileChange;
using autofill::AutofillTable;
@@ -566,7 +566,7 @@ syncer::SyncData AutofillProfileSyncableService::CreateData(
}
bool AutofillProfileSyncableService::UpdateField(
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& new_value,
AutofillProfile* autofill_profile) {
if (UTF16ToUTF8(autofill_profile->GetRawInfo(field_type)) == new_value)
@@ -576,7 +576,7 @@ bool AutofillProfileSyncableService::UpdateField(
}
bool AutofillProfileSyncableService::UpdateMultivaluedField(
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const ::google::protobuf::RepeatedPtrField<std::string>& new_values,
AutofillProfile* autofill_profile) {
std::vector<string16> values;
diff --git a/chrome/browser/webdata/autofill_profile_syncable_service.h b/chrome/browser/webdata/autofill_profile_syncable_service.h
index 498d3aa..b7506c3 100644
--- a/chrome/browser/webdata/autofill_profile_syncable_service.h
+++ b/chrome/browser/webdata/autofill_profile_syncable_service.h
@@ -14,7 +14,7 @@
#include "base/supports_user_data.h"
#include "base/synchronization/lock.h"
#include "base/threading/non_thread_safe.h"
-#include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/webdata/autofill_change.h"
#include "components/autofill/core/browser/webdata/autofill_entry.h"
#include "components/autofill/core/browser/webdata/autofill_webdata_backend.h"
@@ -162,12 +162,12 @@ class AutofillProfileSyncableService
// Helper to compare the local value and cloud value of a field, copy into
// the local value if they differ, and return whether the change happened.
- static bool UpdateField(autofill::AutofillFieldType field_type,
+ static bool UpdateField(autofill::ServerFieldType field_type,
const std::string& new_value,
autofill::AutofillProfile* autofill_profile);
// The same as |UpdateField|, but for multi-valued fields.
static bool UpdateMultivaluedField(
- autofill::AutofillFieldType field_type,
+ autofill::ServerFieldType field_type,
const ::google::protobuf::RepeatedPtrField<std::string>& new_value,
autofill::AutofillProfile* autofill_profile);
diff --git a/components/autofill/content/browser/autocheckout_manager.cc b/components/autofill/content/browser/autocheckout_manager.cc
index 01f656b..ee1c457 100644
--- a/components/autofill/content/browser/autocheckout_manager.cc
+++ b/components/autofill/content/browser/autocheckout_manager.cc
@@ -15,8 +15,8 @@
#include "components/autofill/core/browser/autofill_manager.h"
#include "components/autofill/core/browser/autofill_metrics.h"
#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/credit_card.h"
-#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/form_structure.h"
#include "components/autofill/core/common/autofill_messages.h"
#include "components/autofill/core/common/form_data.h"
@@ -354,27 +354,27 @@ void AutocheckoutManager::ReturnAutocheckoutData(
billing_address_.reset(new AutofillProfile());
for (size_t i = 0; i < result->field_count(); ++i) {
- AutofillFieldType type = result->field(i)->type();
+ const AutofillType& type = result->field(i)->Type();
const base::string16& value = result->field(i)->value;
- if (type == CREDIT_CARD_VERIFICATION_CODE) {
+ if (type.server_type() == CREDIT_CARD_VERIFICATION_CODE) {
cvv_ = result->field(i)->value;
continue;
}
- FieldTypeGroup group = AutofillType(type).group();
+ FieldTypeGroup group = type.group();
if (group == CREDIT_CARD) {
- credit_card_->SetRawInfo(type, value);
+ credit_card_->SetRawInfo(type.server_type(), value);
// TODO(dgwallinga): Find a way of cleanly deprecating CREDIT_CARD_NAME.
// code.google.com/p/chromium/issues/detail?id=263498
- if (type == CREDIT_CARD_NAME)
+ if (type.server_type() == CREDIT_CARD_NAME)
billing_address_->SetRawInfo(NAME_BILLING_FULL, value);
- } else if (type == ADDRESS_HOME_COUNTRY) {
+ } else if (type.server_type() == ADDRESS_HOME_COUNTRY) {
profile_->SetInfo(type, value, autofill_manager_->app_locale());
- } else if (type == ADDRESS_BILLING_COUNTRY) {
+ } else if (type.server_type() == ADDRESS_BILLING_COUNTRY) {
billing_address_->SetInfo(type, value, autofill_manager_->app_locale());
} else if (IsBillingGroup(group)) {
- billing_address_->SetRawInfo(type, value);
+ billing_address_->SetRawInfo(type.server_type(), value);
} else {
- profile_->SetRawInfo(type, value);
+ profile_->SetRawInfo(type.server_type(), value);
}
}
@@ -452,9 +452,9 @@ void AutocheckoutManager::SetValue(const AutofillField& field,
if (field.server_type() == NO_SERVER_DATA)
return;
- AutofillFieldType type = field.type();
+ const AutofillType& type = field.Type();
- if (type == FIELD_WITH_DEFAULT_VALUE) {
+ if (type.server_type() == FIELD_WITH_DEFAULT_VALUE) {
// For a form with radio buttons, like:
// <form>
// <input type="radio" name="sex" value="male">Male<br>
@@ -488,15 +488,15 @@ void AutocheckoutManager::SetValue(const AutofillField& field,
}
// Handle verification code directly.
- if (type == CREDIT_CARD_VERIFICATION_CODE) {
+ if (type.server_type() == CREDIT_CARD_VERIFICATION_CODE) {
field_to_fill->value = cvv_;
return;
}
- if (AutofillType(type).group() == CREDIT_CARD) {
+ if (type.group() == CREDIT_CARD) {
credit_card_->FillFormField(
field, 0, autofill_manager_->app_locale(), field_to_fill);
- } else if (IsBillingGroup(AutofillType(type).group())) {
+ } else if (IsBillingGroup(type.group())) {
billing_address_->FillFormField(
field, 0, autofill_manager_->app_locale(), field_to_fill);
} else {
diff --git a/components/autofill/content/browser/autocheckout_manager_unittest.cc b/components/autofill/content/browser/autocheckout_manager_unittest.cc
index cfe1891..3333384 100644
--- a/components/autofill/content/browser/autocheckout_manager_unittest.cc
+++ b/components/autofill/content/browser/autocheckout_manager_unittest.cc
@@ -56,7 +56,7 @@ FormFieldData BuildField(const std::string& autocomplete_attribute) {
}
scoped_ptr<FormStructure> CreateTestFormStructure(
- const std::vector<AutofillFieldType>& autofill_types) {
+ const std::vector<ServerFieldType>& autofill_types) {
FormData form;
form.name = ASCIIToUTF16("MyForm");
form.method = ASCIIToUTF16("POST");
@@ -84,7 +84,7 @@ scoped_ptr<FormStructure> CreateTestFormStructure(
}
scoped_ptr<FormStructure> CreateTestAddressFormStructure() {
- std::vector<AutofillFieldType> autofill_types;
+ std::vector<ServerFieldType> autofill_types;
autofill_types.push_back(NAME_FULL);
autofill_types.push_back(PHONE_HOME_WHOLE_NUMBER);
autofill_types.push_back(EMAIL_ADDRESS);
@@ -98,7 +98,7 @@ scoped_ptr<FormStructure> CreateTestAddressFormStructure() {
}
scoped_ptr<FormStructure> CreateTestCreditCardFormStructure() {
- std::vector<AutofillFieldType> autofill_types;
+ std::vector<ServerFieldType> autofill_types;
autofill_types.push_back(CREDIT_CARD_NAME);
autofill_types.push_back(CREDIT_CARD_NUMBER);
autofill_types.push_back(CREDIT_CARD_EXP_MONTH);
@@ -229,7 +229,7 @@ scoped_ptr<AutocheckoutPageMetaData> CreateMultiClickMetaData() {
struct TestField {
const char* const field_type;
const char* const field_value;
- AutofillFieldType autofill_type;
+ ServerFieldType autofill_type;
};
const TestField kTestFields[] = {
diff --git a/components/autofill/content/browser/wallet/form_field_error.cc b/components/autofill/content/browser/wallet/form_field_error.cc
index da7ee31..826ea37 100644
--- a/components/autofill/content/browser/wallet/form_field_error.cc
+++ b/components/autofill/content/browser/wallet/form_field_error.cc
@@ -56,7 +56,7 @@ FormFieldError::FormFieldError(ErrorType error_type, Location location)
FormFieldError::~FormFieldError() {}
-AutofillFieldType FormFieldError::GetAutofillType() const {
+ServerFieldType FormFieldError::GetAutofillType() const {
switch (error_type_) {
case INVALID_PHONE_NUMBER:
if (location_ == LEGAL_ADDRESS || location_ == PAYMENT_INSTRUMENT)
diff --git a/components/autofill/content/browser/wallet/form_field_error.h b/components/autofill/content/browser/wallet/form_field_error.h
index 91a67b4..60df6d9 100644
--- a/components/autofill/content/browser/wallet/form_field_error.h
+++ b/components/autofill/content/browser/wallet/form_field_error.h
@@ -59,8 +59,8 @@ class FormFieldError {
ErrorType error_type() const { return error_type_; }
Location location() const { return location_; }
- // Gets the appropriate AutofillFieldType for |location| and |error_type|.
- AutofillFieldType GetAutofillType() const;
+ // Gets the appropriate field type for |location| and |error_type|.
+ ServerFieldType GetAutofillType() const;
// Gets a user facing error message appropriate for |location| and
// |error_type|.
diff --git a/components/autofill/content/browser/wallet/full_wallet.cc b/components/autofill/content/browser/wallet/full_wallet.cc
index 0a7fef6..eaadcc4 100644
--- a/components/autofill/content/browser/wallet/full_wallet.cc
+++ b/components/autofill/content/browser/wallet/full_wallet.cc
@@ -8,6 +8,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/credit_card.h"
namespace {
@@ -126,8 +127,8 @@ scoped_ptr<FullWallet>
required_actions));
}
-base::string16 FullWallet::GetInfo(AutofillFieldType type) {
- switch (type) {
+base::string16 FullWallet::GetInfo(const AutofillType& type) {
+ switch (type.server_type()) {
case CREDIT_CARD_NUMBER:
return UTF8ToUTF16(GetPan());
@@ -188,7 +189,8 @@ bool FullWallet::HasRequiredAction(RequiredAction action) const {
base::string16 FullWallet::TypeAndLastFourDigits() {
CreditCard card;
- card.SetRawInfo(CREDIT_CARD_NUMBER, GetInfo(CREDIT_CARD_NUMBER));
+ card.SetRawInfo(CREDIT_CARD_NUMBER,
+ GetInfo(AutofillType(CREDIT_CARD_NUMBER)));
return card.TypeAndLastFourDigits();
}
diff --git a/components/autofill/content/browser/wallet/full_wallet.h b/components/autofill/content/browser/wallet/full_wallet.h
index b97d670..61e846a 100644
--- a/components/autofill/content/browser/wallet/full_wallet.h
+++ b/components/autofill/content/browser/wallet/full_wallet.h
@@ -20,6 +20,9 @@ class DictionaryValue;
}
namespace autofill {
+
+class AutofillType;
+
namespace wallet {
class FullWalletTest;
@@ -39,7 +42,7 @@ class FullWallet {
CreateFullWallet(const base::DictionaryValue& dictionary);
// Returns corresponding data for |type|.
- base::string16 GetInfo(AutofillFieldType type);
+ base::string16 GetInfo(const AutofillType& type);
// Whether or not |action| is in |required_actions_|.
bool HasRequiredAction(RequiredAction action) const;
diff --git a/components/autofill/content/browser/wallet/full_wallet_unittest.cc b/components/autofill/content/browser/wallet/full_wallet_unittest.cc
index bc4bbc8..5225bc4 100644
--- a/components/autofill/content/browser/wallet/full_wallet_unittest.cc
+++ b/components/autofill/content/browser/wallet/full_wallet_unittest.cc
@@ -11,6 +11,8 @@
#include "components/autofill/content/browser/wallet/full_wallet.h"
#include "components/autofill/content/browser/wallet/required_action.h"
#include "components/autofill/content/browser/wallet/wallet_test_util.h"
+#include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/field_types.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
@@ -452,9 +454,9 @@ TEST_F(FullWalletTest, RestLengthCorrectDecryptionTest) {
EXPECT_TRUE(base::HexStringToBytes("5F04A8704183", &one_time_pad));
full_wallet.set_one_time_pad(one_time_pad);
EXPECT_EQ(ASCIIToUTF16("5285121925598459"),
- full_wallet.GetInfo(CREDIT_CARD_NUMBER));
+ full_wallet.GetInfo(AutofillType(CREDIT_CARD_NUMBER)));
EXPECT_EQ(ASCIIToUTF16("989"),
- full_wallet.GetInfo(CREDIT_CARD_VERIFICATION_CODE));
+ full_wallet.GetInfo(AutofillType(CREDIT_CARD_VERIFICATION_CODE)));
}
TEST_F(FullWalletTest, RestLengthUnderDecryptionTest) {
@@ -470,9 +472,9 @@ TEST_F(FullWalletTest, RestLengthUnderDecryptionTest) {
EXPECT_TRUE(base::HexStringToBytes("063AD35324BF", &one_time_pad));
full_wallet.set_one_time_pad(one_time_pad);
EXPECT_EQ(ASCIIToUTF16("5285127106109719"),
- full_wallet.GetInfo(CREDIT_CARD_NUMBER));
+ full_wallet.GetInfo(AutofillType(CREDIT_CARD_NUMBER)));
EXPECT_EQ(ASCIIToUTF16("385"),
- full_wallet.GetInfo(CREDIT_CARD_VERIFICATION_CODE));
+ full_wallet.GetInfo(AutofillType(CREDIT_CARD_VERIFICATION_CODE)));
}
TEST_F(FullWalletTest, GetCreditCardInfo) {
@@ -486,19 +488,21 @@ TEST_F(FullWalletTest, GetCreditCardInfo) {
required_actions);
EXPECT_EQ(ASCIIToUTF16("15"),
- full_wallet.GetInfo(CREDIT_CARD_EXP_2_DIGIT_YEAR));
+ full_wallet.GetInfo(AutofillType(CREDIT_CARD_EXP_2_DIGIT_YEAR)));
EXPECT_EQ(ASCIIToUTF16("12/15"),
- full_wallet.GetInfo(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR));
+ full_wallet.GetInfo(
+ AutofillType(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR)));
EXPECT_EQ(ASCIIToUTF16("12/2015"),
- full_wallet.GetInfo(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR));
+ full_wallet.GetInfo(
+ AutofillType(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR)));
std::vector<uint8> one_time_pad;
EXPECT_TRUE(base::HexStringToBytes("075DA779F98B", &one_time_pad));
full_wallet.set_one_time_pad(one_time_pad);
EXPECT_EQ(ASCIIToUTF16("MasterCard"),
- full_wallet.GetInfo(CREDIT_CARD_TYPE));
+ full_wallet.GetInfo(AutofillType(CREDIT_CARD_TYPE)));
}
} // namespace wallet
diff --git a/components/autofill/content/browser/wallet/wallet_address.cc b/components/autofill/content/browser/wallet/wallet_address.cc
index 8c9d084..5b69ea3 100644
--- a/components/autofill/content/browser/wallet/wallet_address.cc
+++ b/components/autofill/content/browser/wallet/wallet_address.cc
@@ -10,6 +10,7 @@
#include "base/values.h"
#include "components/autofill/core/browser/autofill_country.h"
#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/state_names.h"
namespace autofill {
@@ -261,9 +262,9 @@ string16 Address::DisplayNameDetail() const {
#endif
}
-string16 Address::GetInfo(AutofillFieldType type,
+string16 Address::GetInfo(const AutofillType& type,
const std::string& app_locale) const {
- switch (AutofillType::GetEquivalentFieldType(type)) {
+ switch (AutofillType::GetEquivalentFieldType(type.server_type())) {
case NAME_FULL:
return recipient_name();
diff --git a/components/autofill/content/browser/wallet/wallet_address.h b/components/autofill/content/browser/wallet/wallet_address.h
index fe9ef9a..cead6cc 100644
--- a/components/autofill/content/browser/wallet/wallet_address.h
+++ b/components/autofill/content/browser/wallet/wallet_address.h
@@ -10,7 +10,6 @@
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
-#include "components/autofill/core/browser/field_types.h"
namespace base {
class DictionaryValue;
@@ -19,6 +18,7 @@ class DictionaryValue;
namespace autofill {
class AutofillProfile;
+class AutofillType;
namespace wallet {
@@ -91,8 +91,8 @@ class Address {
base::string16 DisplayNameDetail() const;
// Returns data appropriate for |type|.
- base::string16 GetInfo(AutofillFieldType type,
- const std::string& app_locale) const;
+ base::string16 GetInfo(const AutofillType& type,
+ const std::string& app_locale) const;
const std::string& country_name_code() const { return country_name_code_; }
const base::string16& recipient_name() const { return recipient_name_; }
diff --git a/components/autofill/content/browser/wallet/wallet_items.cc b/components/autofill/content/browser/wallet/wallet_items.cc
index 1608c3e..6a861e2 100644
--- a/components/autofill/content/browser/wallet/wallet_items.cc
+++ b/components/autofill/content/browser/wallet/wallet_items.cc
@@ -309,12 +309,12 @@ const gfx::Image& WalletItems::MaskedInstrument::CardIcon() const {
}
base::string16 WalletItems::MaskedInstrument::GetInfo(
- AutofillFieldType type,
+ const AutofillType& type,
const std::string& app_locale) const {
- if (AutofillType(type).group() != CREDIT_CARD)
+ if (type.group() != CREDIT_CARD)
return address().GetInfo(type, app_locale);
- switch (type) {
+ switch (type.server_type()) {
case CREDIT_CARD_NAME:
return address().recipient_name();
diff --git a/components/autofill/content/browser/wallet/wallet_items.h b/components/autofill/content/browser/wallet/wallet_items.h
index 33a7462..53a49a1 100644
--- a/components/autofill/content/browser/wallet/wallet_items.h
+++ b/components/autofill/content/browser/wallet/wallet_items.h
@@ -28,6 +28,8 @@ class Image;
namespace autofill {
+class AutofillType;
+
FORWARD_DECLARE_TEST(WalletInstrumentWrapperTest, GetInfoCreditCardExpMonth);
FORWARD_DECLARE_TEST(WalletInstrumentWrapperTest,
GetDisplayTextEmptyWhenExpired);
@@ -88,8 +90,8 @@ class WalletItems {
base::string16 DisplayNameDetail() const;
// Gets info that corresponds with |type|.
- base::string16 GetInfo(AutofillFieldType type,
- const std::string& app_locale) const;
+ base::string16 GetInfo(const AutofillType& type,
+ const std::string& app_locale) const;
// Returns the display type of the and last four digits (e.g. Visa - 4444).
base::string16 TypeAndLastFourDigits() const;
diff --git a/components/autofill/core/browser/address.cc b/components/autofill/core/browser/address.cc
index 2f1694e..339352f 100644
--- a/components/autofill/core/browser/address.cc
+++ b/components/autofill/core/browser/address.cc
@@ -13,7 +13,6 @@
#include "components/autofill/core/browser/autofill_country.h"
#include "components/autofill/core/browser/autofill_field.h"
#include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/field_types.h"
namespace {
@@ -44,16 +43,7 @@ Address& Address::operator=(const Address& address) {
return *this;
}
-void Address::GetSupportedTypes(FieldTypeSet* supported_types) const {
- supported_types->insert(ADDRESS_HOME_LINE1);
- supported_types->insert(ADDRESS_HOME_LINE2);
- supported_types->insert(ADDRESS_HOME_CITY);
- supported_types->insert(ADDRESS_HOME_STATE);
- supported_types->insert(ADDRESS_HOME_ZIP);
- supported_types->insert(ADDRESS_HOME_COUNTRY);
-}
-
-base::string16 Address::GetRawInfo(AutofillFieldType type) const {
+base::string16 Address::GetRawInfo(ServerFieldType type) const {
type = AutofillType::GetEquivalentFieldType(type);
if (type == ADDRESS_HOME_LINE1)
return line1_;
@@ -76,7 +66,7 @@ base::string16 Address::GetRawInfo(AutofillFieldType type) const {
return base::string16();
}
-void Address::SetRawInfo(AutofillFieldType type, const base::string16& value) {
+void Address::SetRawInfo(ServerFieldType type, const base::string16& value) {
type = AutofillType::GetEquivalentFieldType(type);
if (type == ADDRESS_HOME_LINE1) {
line1_ = value;
@@ -96,32 +86,34 @@ void Address::SetRawInfo(AutofillFieldType type, const base::string16& value) {
}
}
-base::string16 Address::GetInfo(AutofillFieldType type,
+base::string16 Address::GetInfo(const AutofillType& type,
const std::string& app_locale) const {
- type = AutofillType::GetEquivalentFieldType(type);
- if (type == ADDRESS_HOME_COUNTRY && !country_code_.empty())
+ ServerFieldType server_type =
+ AutofillType::GetEquivalentFieldType(type.server_type());
+ if (server_type == ADDRESS_HOME_COUNTRY && !country_code_.empty())
return AutofillCountry(UTF16ToASCII(country_code_), app_locale).name();
- return GetRawInfo(type);
+ return GetRawInfo(server_type);
}
-bool Address::SetInfo(AutofillFieldType type,
+bool Address::SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) {
- type = AutofillType::GetEquivalentFieldType(type);
- if (type == ADDRESS_HOME_COUNTRY && !value.empty()) {
+ ServerFieldType server_type =
+ AutofillType::GetEquivalentFieldType(type.server_type());
+ if (server_type == ADDRESS_HOME_COUNTRY && !value.empty()) {
country_code_ =
ASCIIToUTF16(AutofillCountry::GetCountryCode(value, app_locale));
return !country_code_.empty();
}
- SetRawInfo(type, value);
+ SetRawInfo(server_type, value);
return true;
}
void Address::GetMatchingTypes(const base::string16& text,
const std::string& app_locale,
- FieldTypeSet* matching_types) const {
+ ServerFieldTypeSet* matching_types) const {
FormGroup::GetMatchingTypes(text, app_locale, matching_types);
// Check to see if the |text| canonicalized as a country name is a match.
@@ -130,4 +122,13 @@ void Address::GetMatchingTypes(const base::string16& text,
matching_types->insert(ADDRESS_HOME_COUNTRY);
}
+void Address::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
+ supported_types->insert(ADDRESS_HOME_LINE1);
+ supported_types->insert(ADDRESS_HOME_LINE2);
+ supported_types->insert(ADDRESS_HOME_CITY);
+ supported_types->insert(ADDRESS_HOME_STATE);
+ supported_types->insert(ADDRESS_HOME_ZIP);
+ supported_types->insert(ADDRESS_HOME_COUNTRY);
+}
+
} // namespace autofill
diff --git a/components/autofill/core/browser/address.h b/components/autofill/core/browser/address.h
index e55dc85..db1c731 100644
--- a/components/autofill/core/browser/address.h
+++ b/components/autofill/core/browser/address.h
@@ -10,8 +10,6 @@
#include "base/compiler_specific.h"
#include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/form_group.h"
namespace autofill {
@@ -26,21 +24,23 @@ class Address : public FormGroup {
Address& operator=(const Address& address);
// FormGroup:
- virtual base::string16 GetRawInfo(AutofillFieldType type) const OVERRIDE;
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE;
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) OVERRIDE;
- virtual base::string16 GetInfo(AutofillFieldType type,
+ virtual base::string16 GetInfo(const AutofillType& type,
const std::string& app_locale) const OVERRIDE;
- virtual bool SetInfo(AutofillFieldType type,
+ virtual bool SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) OVERRIDE;
- virtual void GetMatchingTypes(const base::string16& text,
- const std::string& app_locale,
- FieldTypeSet* matching_types) const OVERRIDE;
+ virtual void GetMatchingTypes(
+ const base::string16& text,
+ const std::string& app_locale,
+ ServerFieldTypeSet* matching_types) const OVERRIDE;
private:
// FormGroup:
- virtual void GetSupportedTypes(FieldTypeSet* supported_types) const OVERRIDE;
+ virtual void GetSupportedTypes(
+ ServerFieldTypeSet* supported_types) const OVERRIDE;
// The address.
base::string16 line1_;
diff --git a/components/autofill/core/browser/address_field.cc b/components/autofill/core/browser/address_field.cc
index c219465..ba7c09e 100644
--- a/components/autofill/core/browser/address_field.cc
+++ b/components/autofill/core/browser/address_field.cc
@@ -136,14 +136,14 @@ AddressField::AddressField()
type_(kGenericAddress) {
}
-bool AddressField::ClassifyField(FieldTypeMap* map) const {
- AutofillFieldType address_company;
- AutofillFieldType address_line1;
- AutofillFieldType address_line2;
- AutofillFieldType address_city;
- AutofillFieldType address_state;
- AutofillFieldType address_zip;
- AutofillFieldType address_country;
+bool AddressField::ClassifyField(ServerFieldTypeMap* map) const {
+ ServerFieldType address_company;
+ ServerFieldType address_line1;
+ ServerFieldType address_line2;
+ ServerFieldType address_city;
+ ServerFieldType address_state;
+ ServerFieldType address_zip;
+ ServerFieldType address_country;
switch (type_) {
case kShippingAddress:
diff --git a/components/autofill/core/browser/address_field.h b/components/autofill/core/browser/address_field.h
index ba90bb4..a12d598 100644
--- a/components/autofill/core/browser/address_field.h
+++ b/components/autofill/core/browser/address_field.h
@@ -25,7 +25,7 @@ class AddressField : public FormField {
protected:
// FormField:
- virtual bool ClassifyField(FieldTypeMap* map) const OVERRIDE;
+ virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE;
private:
enum AddressType {
diff --git a/components/autofill/core/browser/address_field_unittest.cc b/components/autofill/core/browser/address_field_unittest.cc
index d92ee25..6949ef75 100644
--- a/components/autofill/core/browser/address_field_unittest.cc
+++ b/components/autofill/core/browser/address_field_unittest.cc
@@ -21,7 +21,7 @@ class AddressFieldTest : public testing::Test {
protected:
ScopedVector<const AutofillField> list_;
scoped_ptr<AddressField> field_;
- FieldTypeMap field_type_map_;
+ ServerFieldTypeMap field_type_map_;
// Downcast for tests.
static AddressField* Parse(AutofillScanner* scanner) {
diff --git a/components/autofill/core/browser/address_unittest.cc b/components/autofill/core/browser/address_unittest.cc
index 418fb1d..8d2e920 100644
--- a/components/autofill/core/browser/address_unittest.cc
+++ b/components/autofill/core/browser/address_unittest.cc
@@ -35,15 +35,17 @@ TEST_F(AddressTest, GetCountry) {
EXPECT_EQ(base::string16(), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
// Make sure that nothing breaks when the country code is missing.
- base::string16 country = address.GetInfo(ADDRESS_HOME_COUNTRY, "en-US");
+ base::string16 country =
+ address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
EXPECT_EQ(base::string16(), country);
- address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US"), "en-US");
- country = address.GetInfo(ADDRESS_HOME_COUNTRY, "en-US");
+ address.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("US"), "en-US");
+ country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
EXPECT_EQ(ASCIIToUTF16("United States"), country);
address.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("CA"));
- country = address.GetInfo(ADDRESS_HOME_COUNTRY, "en-US");
+ country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
EXPECT_EQ(ASCIIToUTF16("Canada"), country);
}
@@ -53,32 +55,39 @@ TEST_F(AddressTest, SetCountry) {
EXPECT_EQ(base::string16(), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
// Test basic conversion.
- address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("United States"), "en-US");
- base::string16 country = address.GetInfo(ADDRESS_HOME_COUNTRY, "en-US");
+ address.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("United States"),
+ "en-US");
+ base::string16 country =
+ address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
EXPECT_EQ(ASCIIToUTF16("US"), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
EXPECT_EQ(ASCIIToUTF16("United States"), country);
// Test basic synonym detection.
- address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("USA"), "en-US");
- country = address.GetInfo(ADDRESS_HOME_COUNTRY, "en-US");
+ address.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("USA"), "en-US");
+ country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
EXPECT_EQ(ASCIIToUTF16("US"), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
EXPECT_EQ(ASCIIToUTF16("United States"), country);
// Test case-insensitivity.
- address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("canADA"), "en-US");
- country = address.GetInfo(ADDRESS_HOME_COUNTRY, "en-US");
+ address.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("canADA"), "en-US");
+ country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
EXPECT_EQ(ASCIIToUTF16("CA"), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
EXPECT_EQ(ASCIIToUTF16("Canada"), country);
// Test country code detection.
- address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("JP"), "en-US");
- country = address.GetInfo(ADDRESS_HOME_COUNTRY, "en-US");
+ address.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("JP"), "en-US");
+ country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
EXPECT_EQ(ASCIIToUTF16("JP"), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
EXPECT_EQ(ASCIIToUTF16("Japan"), country);
// Test that we ignore unknown countries.
- address.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("Unknown"), "en-US");
- country = address.GetInfo(ADDRESS_HOME_COUNTRY, "en-US");
+ address.SetInfo(
+ AutofillType(ADDRESS_HOME_COUNTRY), ASCIIToUTF16("Unknown"), "en-US");
+ country = address.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), "en-US");
EXPECT_EQ(base::string16(), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
EXPECT_EQ(base::string16(), country);
}
@@ -97,7 +106,7 @@ TEST_F(AddressTest, IsCountry) {
};
for (size_t i = 0; i < arraysize(kValidMatches); ++i) {
SCOPED_TRACE(kValidMatches[i]);
- FieldTypeSet matching_types;
+ ServerFieldTypeSet matching_types;
address.GetMatchingTypes(ASCIIToUTF16(kValidMatches[i]), "US",
&matching_types);
ASSERT_EQ(1U, matching_types.size());
@@ -109,7 +118,7 @@ TEST_F(AddressTest, IsCountry) {
"Garbage"
};
for (size_t i = 0; i < arraysize(kInvalidMatches); ++i) {
- FieldTypeSet matching_types;
+ ServerFieldTypeSet matching_types;
address.GetMatchingTypes(ASCIIToUTF16(kInvalidMatches[i]), "US",
&matching_types);
EXPECT_EQ(0U, matching_types.size());
@@ -118,7 +127,7 @@ TEST_F(AddressTest, IsCountry) {
// Make sure that garbage values don't match when the country code is empty.
address.SetRawInfo(ADDRESS_HOME_COUNTRY, base::string16());
EXPECT_EQ(base::string16(), address.GetRawInfo(ADDRESS_HOME_COUNTRY));
- FieldTypeSet matching_types;
+ ServerFieldTypeSet matching_types;
address.GetMatchingTypes(ASCIIToUTF16("Garbage"), "US", &matching_types);
EXPECT_EQ(0U, matching_types.size());
}
diff --git a/components/autofill/core/browser/android/auxiliary_profiles_android.cc b/components/autofill/core/browser/android/auxiliary_profiles_android.cc
index 7556521..6d0b65b 100644
--- a/components/autofill/core/browser/android/auxiliary_profiles_android.cc
+++ b/components/autofill/core/browser/android/auxiliary_profiles_android.cc
@@ -16,6 +16,7 @@
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/android/auxiliary_profile_loader_android.h"
#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/phone_number.h"
// Generates the autofill profile by accessing the Android
@@ -93,7 +94,7 @@ void AuxiliaryProfilesAndroid::LoadAddress(AutofillProfile* profile) {
profile->SetRawInfo(ADDRESS_HOME_CITY, city);
profile->SetRawInfo(ADDRESS_HOME_STATE, region);
profile->SetRawInfo(ADDRESS_HOME_ZIP, postal_code);
- profile->SetInfo(ADDRESS_HOME_COUNTRY, country, app_locale_);
+ profile->SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), country, app_locale_);
}
void AuxiliaryProfilesAndroid::LoadName(AutofillProfile* profile) {
diff --git a/components/autofill/core/browser/autofill_common_test.cc b/components/autofill/core/browser/autofill_common_test.cc
index 42265cd..f477b25 100644
--- a/components/autofill/core/browser/autofill_common_test.cc
+++ b/components/autofill/core/browser/autofill_common_test.cc
@@ -9,6 +9,7 @@
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/credit_card.h"
+#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/common/autofill_pref_names.h"
#include "components/autofill/core/common/form_data.h"
#include "components/autofill/core/common/form_field_data.h"
@@ -69,7 +70,7 @@ void CreateTestAddressFormData(FormData* form) {
}
inline void check_and_set(
- FormGroup* profile, AutofillFieldType type, const char* value) {
+ FormGroup* profile, ServerFieldType type, const char* value) {
if (value)
profile->SetRawInfo(type, UTF8ToUTF16(value));
}
diff --git a/components/autofill/core/browser/autofill_data_model.cc b/components/autofill/core/browser/autofill_data_model.cc
index 0aa0f30..28a380e 100644
--- a/components/autofill/core/browser/autofill_data_model.cc
+++ b/components/autofill/core/browser/autofill_data_model.cc
@@ -11,6 +11,7 @@
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_country.h"
#include "components/autofill/core/browser/autofill_field.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/state_names.h"
#include "components/autofill/core/browser/validation.h"
#include "components/autofill/core/common/form_field_data.h"
@@ -123,7 +124,7 @@ AutofillDataModel::AutofillDataModel(const std::string& guid,
origin_(origin) {}
AutofillDataModel::~AutofillDataModel() {}
-void AutofillDataModel::FillSelectControl(AutofillFieldType type,
+void AutofillDataModel::FillSelectControl(const AutofillType& type,
const std::string& app_locale,
FormFieldData* field) const {
DCHECK(field);
@@ -157,18 +158,22 @@ void AutofillDataModel::FillSelectControl(AutofillFieldType type,
return;
}
- if (type == ADDRESS_HOME_STATE || type == ADDRESS_BILLING_STATE) {
+ ServerFieldType server_type = type.server_type();
+ if (server_type == ADDRESS_HOME_STATE ||
+ server_type == ADDRESS_BILLING_STATE) {
FillStateSelectControl(field_text, field);
- } else if (type == ADDRESS_HOME_COUNTRY || type == ADDRESS_BILLING_COUNTRY) {
+ } else if (server_type == ADDRESS_HOME_COUNTRY ||
+ server_type == ADDRESS_BILLING_COUNTRY) {
FillCountrySelectControl(app_locale, field);
- } else if (type == CREDIT_CARD_EXP_MONTH) {
+ } else if (server_type == CREDIT_CARD_EXP_MONTH) {
FillExpirationMonthSelectControl(field_text, field);
- } else if (type == CREDIT_CARD_EXP_4_DIGIT_YEAR) {
+ } else if (server_type == CREDIT_CARD_EXP_4_DIGIT_YEAR) {
// Attempt to fill the year as a 2-digit year. This compensates for the
// fact that our heuristics do not always correctly detect when a website
// requests a 2-digit rather than a 4-digit year.
- FillSelectControl(CREDIT_CARD_EXP_2_DIGIT_YEAR, app_locale, field);
- } else if (type == CREDIT_CARD_TYPE) {
+ FillSelectControl(AutofillType(CREDIT_CARD_EXP_2_DIGIT_YEAR), app_locale,
+ field);
+ } else if (server_type == CREDIT_CARD_TYPE) {
FillCreditCardTypeSelectControl(field_text, field);
}
}
diff --git a/components/autofill/core/browser/autofill_data_model.h b/components/autofill/core/browser/autofill_data_model.h
index 24739da..0f2cd33 100644
--- a/components/autofill/core/browser/autofill_data_model.h
+++ b/components/autofill/core/browser/autofill_data_model.h
@@ -32,7 +32,7 @@ class AutofillDataModel : public FormGroup {
// Fills in select control with data matching |type| from |this|.
// Public for testing purposes.
- void FillSelectControl(AutofillFieldType type,
+ void FillSelectControl(const AutofillType& type,
const std::string& app_locale,
FormFieldData* field_data) const;
diff --git a/components/autofill/core/browser/autofill_data_model_unittest.cc b/components/autofill/core/browser/autofill_data_model_unittest.cc
index 05adaf9..8004df4 100644
--- a/components/autofill/core/browser/autofill_data_model_unittest.cc
+++ b/components/autofill/core/browser/autofill_data_model_unittest.cc
@@ -19,13 +19,13 @@ class TestAutofillDataModel : public AutofillDataModel {
virtual ~TestAutofillDataModel() {}
private:
- virtual base::string16 GetRawInfo(AutofillFieldType type) const OVERRIDE {
+ virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE {
return base::string16();
}
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) OVERRIDE {}
virtual void GetSupportedTypes(
- FieldTypeSet* supported_types) const OVERRIDE {}
+ ServerFieldTypeSet* supported_types) const OVERRIDE {}
virtual void FillFormField(const AutofillField& field,
size_t variant,
const std::string& app_locale,
diff --git a/components/autofill/core/browser/autofill_download.cc b/components/autofill/core/browser/autofill_download.cc
index c189596..9bf81e2 100644
--- a/components/autofill/core/browser/autofill_download.cc
+++ b/components/autofill/core/browser/autofill_download.cc
@@ -39,7 +39,7 @@ const size_t kMaxFormCacheSize = 16;
// into the Autofill server as experiment data.
static void LogFieldAssignments(
const FormStructure& form,
- const FieldTypeSet& available_field_types) {
+ const ServerFieldTypeSet& available_field_types) {
std::string form_xml;
if (!form.EncodeFieldAssignments(available_field_types, &form_xml))
return;
@@ -124,7 +124,7 @@ bool AutofillDownloadManager::StartQueryRequest(
bool AutofillDownloadManager::StartUploadRequest(
const FormStructure& form,
bool form_was_autofilled,
- const FieldTypeSet& available_field_types) {
+ const ServerFieldTypeSet& available_field_types) {
std::string form_xml;
if (!form.EncodeUploadRequest(available_field_types, form_was_autofilled,
&form_xml))
diff --git a/components/autofill/core/browser/autofill_download.h b/components/autofill/core/browser/autofill_download.h
index 21949ad..bba1d71 100644
--- a/components/autofill/core/browser/autofill_download.h
+++ b/components/autofill/core/browser/autofill_download.h
@@ -82,7 +82,7 @@ class AutofillDownloadManager : public net::URLFetcherDelegate {
// stored on the local client.
bool StartUploadRequest(const FormStructure& form,
bool form_was_autofilled,
- const FieldTypeSet& available_field_types);
+ const ServerFieldTypeSet& available_field_types);
private:
friend class AutofillDownloadTest;
diff --git a/components/autofill/core/browser/autofill_download_unittest.cc b/components/autofill/core/browser/autofill_download_unittest.cc
index ed2c705..9035c9c 100644
--- a/components/autofill/core/browser/autofill_download_unittest.cc
+++ b/components/autofill/core/browser/autofill_download_unittest.cc
@@ -204,10 +204,10 @@ TEST_F(AutofillDownloadTest, QueryAndUploadTest) {
download_manager_.SetNegativeUploadRate(1.0);
// Request with id 1.
EXPECT_TRUE(download_manager_.StartUploadRequest(
- *(form_structures[0]), true, FieldTypeSet()));
+ *(form_structures[0]), true, ServerFieldTypeSet()));
// Request with id 2.
EXPECT_TRUE(download_manager_.StartUploadRequest(
- *(form_structures[1]), false, FieldTypeSet()));
+ *(form_structures[1]), false, ServerFieldTypeSet()));
const char *responses[] = {
"<autofillqueryresponse>"
@@ -272,9 +272,9 @@ TEST_F(AutofillDownloadTest, QueryAndUploadTest) {
download_manager_.SetNegativeUploadRate(0.0);
// No actual requests for the next two calls, as we set upload rate to 0%.
EXPECT_FALSE(download_manager_.StartUploadRequest(
- *(form_structures[0]), true, FieldTypeSet()));
+ *(form_structures[0]), true, ServerFieldTypeSet()));
EXPECT_FALSE(download_manager_.StartUploadRequest(
- *(form_structures[1]), false, FieldTypeSet()));
+ *(form_structures[1]), false, ServerFieldTypeSet()));
fetcher = factory.GetFetcherByID(3);
EXPECT_EQ(NULL, fetcher);
@@ -315,7 +315,7 @@ TEST_F(AutofillDownloadTest, QueryAndUploadTest) {
form_structures[0]->upload_required_ = UPLOAD_REQUIRED;
// Request with id 4.
EXPECT_TRUE(download_manager_.StartUploadRequest(
- *(form_structures[0]), true, FieldTypeSet()));
+ *(form_structures[0]), true, ServerFieldTypeSet()));
fetcher = factory.GetFetcherByID(4);
ASSERT_TRUE(fetcher);
fetcher->set_backoff_delay(TestTimeouts::action_max_timeout());
@@ -327,7 +327,7 @@ TEST_F(AutofillDownloadTest, QueryAndUploadTest) {
// Upload requests should be ignored for the next 10 seconds.
EXPECT_FALSE(download_manager_.StartUploadRequest(
- *(form_structures[0]), true, FieldTypeSet()));
+ *(form_structures[0]), true, ServerFieldTypeSet()));
fetcher = factory.GetFetcherByID(5);
EXPECT_EQ(NULL, fetcher);
}
diff --git a/components/autofill/core/browser/autofill_field.cc b/components/autofill/core/browser/autofill_field.cc
index 9e72054..5d19232 100644
--- a/components/autofill/core/browser/autofill_field.cc
+++ b/components/autofill/core/browser/autofill_field.cc
@@ -8,6 +8,7 @@
#include "base/sha1.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
+#include "components/autofill/core/browser/autofill_type.h"
namespace {
@@ -44,7 +45,7 @@ AutofillField::AutofillField(const FormFieldData& field,
AutofillField::~AutofillField() {}
-void AutofillField::set_heuristic_type(AutofillFieldType type) {
+void AutofillField::set_heuristic_type(ServerFieldType type) {
if (type >= 0 && type < MAX_VALID_FIELD_TYPE &&
type != FIELD_WITH_DEFAULT_VALUE) {
heuristic_type_ = type;
@@ -56,7 +57,7 @@ void AutofillField::set_heuristic_type(AutofillFieldType type) {
}
}
-void AutofillField::set_server_type(AutofillFieldType type) {
+void AutofillField::set_server_type(ServerFieldType type) {
// Chrome no longer supports fax numbers, but the server still does.
if (type >= PHONE_FAX_NUMBER && type <= PHONE_FAX_WHOLE_NUMBER)
return;
@@ -64,11 +65,11 @@ void AutofillField::set_server_type(AutofillFieldType type) {
server_type_ = type;
}
-AutofillFieldType AutofillField::type() const {
+AutofillType AutofillField::Type() const {
if (server_type_ != NO_SERVER_DATA)
- return server_type_;
+ return AutofillType(server_type_);
- return heuristic_type_;
+ return AutofillType(heuristic_type_);
}
bool AutofillField::IsEmpty() const {
@@ -82,7 +83,7 @@ std::string AutofillField::FieldSignature() const {
}
bool AutofillField::IsFieldFillable() const {
- return type() != UNKNOWN_TYPE;
+ return Type().server_type() != UNKNOWN_TYPE;
}
} // namespace autofill
diff --git a/components/autofill/core/browser/autofill_field.h b/components/autofill/core/browser/autofill_field.h
index e4e8217..53826cd 100644
--- a/components/autofill/core/browser/autofill_field.h
+++ b/components/autofill/core/browser/autofill_field.h
@@ -14,6 +14,8 @@
namespace autofill {
+class AutofillType;
+
class AutofillField : public FormFieldData {
public:
enum PhonePart {
@@ -29,23 +31,23 @@ class AutofillField : public FormFieldData {
const base::string16& unique_name() const { return unique_name_; }
const std::string& section() const { return section_; }
- AutofillFieldType heuristic_type() const { return heuristic_type_; }
- AutofillFieldType server_type() const { return server_type_; }
- const FieldTypeSet& possible_types() const { return possible_types_; }
+ ServerFieldType heuristic_type() const { return heuristic_type_; }
+ ServerFieldType server_type() const { return server_type_; }
+ const ServerFieldTypeSet& possible_types() const { return possible_types_; }
PhonePart phone_part() const { return phone_part_; }
// Sets the heuristic type of this field, validating the input.
void set_section(const std::string& section) { section_ = section; }
- void set_heuristic_type(AutofillFieldType type);
- void set_server_type(AutofillFieldType type);
- void set_possible_types(const FieldTypeSet& possible_types) {
+ void set_heuristic_type(ServerFieldType type);
+ void set_server_type(ServerFieldType type);
+ void set_possible_types(const ServerFieldTypeSet& possible_types) {
possible_types_ = possible_types;
}
void set_phone_part(PhonePart part) { phone_part_ = part; }
// This function automatically chooses between server and heuristic autofill
// type, depending on the data available.
- AutofillFieldType type() const;
+ AutofillType Type() const;
// Returns true if the value of this field is empty.
bool IsEmpty() const;
@@ -70,13 +72,13 @@ class AutofillField : public FormFieldData {
std::string section_;
// The type of the field, as determined by the Autofill server.
- AutofillFieldType server_type_;
+ ServerFieldType server_type_;
// The type of the field, as determined by the local heuristics.
- AutofillFieldType heuristic_type_;
+ ServerFieldType heuristic_type_;
// The set of possible types for this field.
- FieldTypeSet possible_types_;
+ ServerFieldTypeSet possible_types_;
// Used to track whether this field is a phone prefix or suffix.
PhonePart phone_part_;
diff --git a/components/autofill/core/browser/autofill_field_unittest.cc b/components/autofill/core/browser/autofill_field_unittest.cc
index 53de47b..c47f314 100644
--- a/components/autofill/core/browser/autofill_field_unittest.cc
+++ b/components/autofill/core/browser/autofill_field_unittest.cc
@@ -5,6 +5,7 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_field.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/field_types.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -17,19 +18,19 @@ TEST(AutofillFieldTest, Type) {
ASSERT_EQ(UNKNOWN_TYPE, field.heuristic_type());
// |server_type_| is NO_SERVER_DATA, so |heuristic_type_| is returned.
- EXPECT_EQ(UNKNOWN_TYPE, field.type());
+ EXPECT_EQ(UNKNOWN_TYPE, field.Type().server_type());
// Set the heuristic type and check it.
field.set_heuristic_type(NAME_FIRST);
- EXPECT_EQ(NAME_FIRST, field.type());
+ EXPECT_EQ(NAME_FIRST, field.Type().server_type());
// Set the server type and check it.
field.set_server_type(ADDRESS_BILLING_LINE1);
- EXPECT_EQ(ADDRESS_BILLING_LINE1, field.type());
+ EXPECT_EQ(ADDRESS_BILLING_LINE1, field.Type().server_type());
// Remove the server type to make sure the heuristic type is preserved.
field.set_server_type(NO_SERVER_DATA);
- EXPECT_EQ(NAME_FIRST, field.type());
+ EXPECT_EQ(NAME_FIRST, field.Type().server_type());
}
TEST(AutofillFieldTest, IsEmpty) {
@@ -71,7 +72,7 @@ TEST(AutofillFieldTest, FieldSignature) {
TEST(AutofillFieldTest, IsFieldFillable) {
AutofillField field;
- ASSERT_EQ(UNKNOWN_TYPE, field.type());
+ ASSERT_EQ(UNKNOWN_TYPE, field.Type().server_type());
// Type is unknown.
EXPECT_FALSE(field.IsFieldFillable());
diff --git a/components/autofill/core/browser/autofill_ie_toolbar_import_win.cc b/components/autofill/core/browser/autofill_ie_toolbar_import_win.cc
index 4ac4edc..388e079 100644
--- a/components/autofill/core/browser/autofill_ie_toolbar_import_win.cc
+++ b/components/autofill/core/browser/autofill_ie_toolbar_import_win.cc
@@ -99,7 +99,7 @@ base::string16 ReadAndDecryptValue(const RegKey& key,
}
struct {
- AutofillFieldType field_type;
+ ServerFieldType field_type;
const wchar_t *reg_value_name;
} profile_reg_values[] = {
{ NAME_FIRST, L"name_first" },
@@ -131,7 +131,7 @@ struct {
// We do not import verification code.
};
-typedef std::map<std::wstring, AutofillFieldType> RegToFieldMap;
+typedef std::map<std::wstring, ServerFieldType> RegToFieldMap;
// Imports address or credit card data from the given registry |key| into the
// given |form_group|, with the help of |reg_to_field|. When importing address
@@ -163,9 +163,9 @@ bool ImportSingleFormGroup(const RegKey& key,
// Phone numbers are stored piece-by-piece, and then reconstructed from
// the pieces. The rest of the fields are set "as is".
- if (!phone || !phone->SetInfo(it->second, field_value)) {
+ if (!phone || !phone->SetInfo(AutofillType(it->second), field_value)) {
has_non_empty_fields = true;
- form_group->SetInfo(it->second, field_value, app_locale);
+ form_group->SetInfo(AutofillType(it->second), field_value, app_locale);
}
}
}
diff --git a/components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc b/components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc
index dd343d1..61917bc 100644
--- a/components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc
+++ b/components/autofill/core/browser/autofill_ie_toolbar_import_win_unittest.cc
@@ -170,9 +170,11 @@ TEST_F(AutofillIeToolbarImportTest, TestAutofillImport) {
EXPECT_EQ(profile1[3].value, profiles[1].GetRawInfo(EMAIL_ADDRESS));
EXPECT_EQ(profile1[4].value, profiles[1].GetRawInfo(COMPANY_NAME));
EXPECT_EQ(profile1[7].value,
- profiles[1].GetInfo(PHONE_HOME_COUNTRY_CODE, "US"));
- EXPECT_EQ(profile1[6].value, profiles[1].GetInfo(PHONE_HOME_CITY_CODE, "US"));
- EXPECT_EQ(L"5555555", profiles[1].GetInfo(PHONE_HOME_NUMBER, "US"));
+ profiles[1].GetInfo(AutofillType(PHONE_HOME_COUNTRY_CODE), "US"));
+ EXPECT_EQ(profile1[6].value,
+ profiles[1].GetInfo(AutofillType(PHONE_HOME_CITY_CODE), "US"));
+ EXPECT_EQ(L"5555555",
+ profiles[1].GetInfo(AutofillType(PHONE_HOME_NUMBER), "US"));
EXPECT_EQ(L"+1 650-555-5555",
profiles[1].GetRawInfo(PHONE_HOME_WHOLE_NUMBER));
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc
index 76437df..dded980 100644
--- a/components/autofill/core/browser/autofill_manager.cc
+++ b/components/autofill/core/browser/autofill_manager.cc
@@ -150,7 +150,7 @@ void DeterminePossibleFieldTypesForUpload(
AutofillField* field = submitted_form->field(i);
base::string16 value = CollapseWhitespace(field->value, false);
- FieldTypeSet matching_types;
+ ServerFieldTypeSet matching_types;
for (std::vector<AutofillProfile>::const_iterator it = profiles.begin();
it != profiles.end(); ++it) {
it->GetMatchingTypes(value, app_locale, &matching_types);
@@ -424,9 +424,8 @@ void AutofillManager::OnQueryFormFieldAutofill(int query_id,
GetCachedFormAndField(form, field, &form_structure, &autofill_field) &&
// Don't send suggestions for forms that aren't auto-fillable.
form_structure->IsAutofillable(false)) {
- AutofillFieldType type = autofill_field->type();
- bool is_filling_credit_card =
- (AutofillType(type).group() == CREDIT_CARD);
+ AutofillType type = autofill_field->Type();
+ bool is_filling_credit_card = (type.group() == CREDIT_CARD);
if (is_filling_credit_card) {
GetCreditCardSuggestions(
field, type, &values, &labels, &icons, &unique_ids);
@@ -534,8 +533,7 @@ void AutofillManager::OnFillAutofillFormData(int query_id,
}
// Cache the field type for the field from which the user initiated autofill.
- FieldTypeGroup initiating_group_type =
- AutofillType(autofill_field->type()).group();
+ FieldTypeGroup initiating_group_type = autofill_field->Type().group();
DCHECK_EQ(form_structure->field_count(), form.fields.size());
for (size_t i = 0; i < form_structure->field_count(); ++i) {
if (form_structure->field(i)->section() != autofill_field->section())
@@ -544,8 +542,7 @@ void AutofillManager::OnFillAutofillFormData(int query_id,
DCHECK_EQ(*form_structure->field(i), result.fields[i]);
const AutofillField* cached_field = form_structure->field(i);
- FieldTypeGroup field_group_type =
- AutofillType(cached_field->type()).group();
+ FieldTypeGroup field_group_type = cached_field->Type().group();
if (field_group_type != NO_GROUP) {
// If the field being filled is either
// (a) the field that the user initiated the fill from, or
@@ -857,7 +854,7 @@ void AutofillManager::UploadFormData(const FormStructure& submitted_form) {
was_autofilled = true;
}
- FieldTypeSet non_empty_types;
+ ServerFieldTypeSet non_empty_types;
personal_data_->GetNonEmptyTypes(&non_empty_types);
download_manager_->StartUploadRequest(submitted_form, was_autofilled,
@@ -1071,14 +1068,14 @@ bool AutofillManager::UpdateCachedForm(const FormData& live_form,
void AutofillManager::GetProfileSuggestions(
FormStructure* form,
const FormFieldData& field,
- AutofillFieldType type,
+ const AutofillType& type,
std::vector<base::string16>* values,
std::vector<base::string16>* labels,
std::vector<base::string16>* icons,
std::vector<int>* unique_ids) const {
- std::vector<AutofillFieldType> field_types(form->field_count());
+ std::vector<ServerFieldType> field_types(form->field_count());
for (size_t i = 0; i < form->field_count(); ++i) {
- field_types[i] = form->field(i)->type();
+ field_types.push_back(form->field(i)->Type().server_type());
}
std::vector<GUIDPair> guid_pairs;
@@ -1094,7 +1091,7 @@ void AutofillManager::GetProfileSuggestions(
void AutofillManager::GetCreditCardSuggestions(
const FormFieldData& field,
- AutofillFieldType type,
+ const AutofillType& type,
std::vector<base::string16>* values,
std::vector<base::string16>* labels,
std::vector<base::string16>* icons,
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h
index c0fa3db..b9e4d31 100644
--- a/components/autofill/core/browser/autofill_manager.h
+++ b/components/autofill/core/browser/autofill_manager.h
@@ -23,7 +23,6 @@
#include "components/autofill/core/browser/autocomplete_history_manager.h"
#include "components/autofill/core/browser/autofill_download.h"
#include "components/autofill/core/browser/autofill_manager_delegate.h"
-#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/form_structure.h"
#include "components/autofill/core/browser/personal_data_manager.h"
#include "components/autofill/core/common/autocheckout_status.h"
@@ -54,10 +53,11 @@ class AutofillDataModel;
class AutofillDownloadManager;
class AutofillExternalDelegate;
class AutofillField;
-class AutofillProfile;
class AutofillManagerDelegate;
class AutofillManagerTestDelegate;
class AutofillMetrics;
+class AutofillProfile;
+class AutofillType;
class CreditCard;
class FormStructureBrowserTest;
@@ -283,7 +283,7 @@ class AutofillManager : public AutofillDownloadManager::Observer {
// is filled with the Profile label.
void GetProfileSuggestions(FormStructure* form,
const FormFieldData& field,
- AutofillFieldType type,
+ const AutofillType& type,
std::vector<base::string16>* values,
std::vector<base::string16>* labels,
std::vector<base::string16>* icons,
@@ -292,7 +292,7 @@ class AutofillManager : public AutofillDownloadManager::Observer {
// Returns a list of values from the stored credit cards that match |type| and
// the value of |field| and returns the labels of the matching credit cards.
void GetCreditCardSuggestions(const FormFieldData& field,
- AutofillFieldType type,
+ const AutofillType& type,
std::vector<base::string16>* values,
std::vector<base::string16>* labels,
std::vector<base::string16>* icons,
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc
index 639d733e..8c2a8ef 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -494,7 +494,7 @@ class TestAutofillManager : public AutofillManager {
void set_expected_submitted_field_types(
- const std::vector<FieldTypeSet>& expected_types) {
+ const std::vector<ServerFieldTypeSet>& expected_types) {
expected_submitted_field_types_ = expected_types;
}
@@ -514,11 +514,11 @@ class TestAutofillManager : public AutofillManager {
base::StringPrintf(
"Field %d with value %s", static_cast<int>(i),
UTF16ToUTF8(submitted_form->field(i)->value).c_str()));
- const FieldTypeSet& possible_types =
+ const ServerFieldTypeSet& possible_types =
submitted_form->field(i)->possible_types();
EXPECT_EQ(expected_submitted_field_types_[i].size(),
possible_types.size());
- for (FieldTypeSet::const_iterator it =
+ for (ServerFieldTypeSet::const_iterator it =
expected_submitted_field_types_[i].begin();
it != expected_submitted_field_types_[i].end(); ++it) {
EXPECT_TRUE(possible_types.count(*it))
@@ -638,7 +638,7 @@ class TestAutofillManager : public AutofillManager {
std::string autocheckout_url_prefix_;
std::string submitted_form_signature_;
- std::vector<FieldTypeSet> expected_submitted_field_types_;
+ std::vector<ServerFieldTypeSet> expected_submitted_field_types_;
DISALLOW_COPY_AND_ASSIGN(TestAutofillManager);
};
@@ -864,8 +864,8 @@ class TestFormStructure : public FormStructure {
: FormStructure(form, std::string()) {}
virtual ~TestFormStructure() {}
- void SetFieldTypes(const std::vector<AutofillFieldType>& heuristic_types,
- const std::vector<AutofillFieldType>& server_types) {
+ void SetFieldTypes(const std::vector<ServerFieldType>& heuristic_types,
+ const std::vector<ServerFieldType>& server_types) {
ASSERT_EQ(field_count(), heuristic_types.size());
ASSERT_EQ(field_count(), server_types.size());
@@ -2649,10 +2649,10 @@ TEST_F(AutofillManagerTest, FormSubmittedServerTypes) {
form_structure->DetermineHeuristicTypes(metrics_logger);
// Clear the heuristic types, and instead set the appropriate server types.
- std::vector<AutofillFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types;
for (size_t i = 0; i < form.fields.size(); ++i) {
heuristic_types.push_back(UNKNOWN_TYPE);
- server_types.push_back(form_structure->field(i)->type());
+ server_types.push_back(form_structure->field(i)->Type().server_type());
}
form_structure->SetFieldTypes(heuristic_types, server_types);
autofill_manager_->AddSeenForm(form_structure);
@@ -2770,11 +2770,11 @@ TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesForUpload) {
form.action = GURL("http://myform.com/submit.html");
form.user_submitted = true;
- std::vector<FieldTypeSet> expected_types;
+ std::vector<ServerFieldTypeSet> expected_types;
// These fields should all match.
FormFieldData field;
- FieldTypeSet types;
+ ServerFieldTypeSet types;
test::CreateTestFormField("", "1", "Elvis", "text", &field);
types.clear();
types.insert(NAME_FIRST);
@@ -3163,10 +3163,10 @@ TEST_F(AutofillManagerTest, TestBubbleShown) {
form_structure->DetermineHeuristicTypes(metrics_logger);
// Build and add form structure with server data.
- std::vector<AutofillFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types;
for (size_t i = 0; i < form.fields.size(); ++i) {
heuristic_types.push_back(UNKNOWN_TYPE);
- server_types.push_back(form_structure->field(i)->type());
+ server_types.push_back(form_structure->field(i)->Type().server_type());
}
form_structure->SetFieldTypes(heuristic_types, server_types);
autofill_manager_->AddSeenForm(form_structure);
@@ -3193,9 +3193,9 @@ TEST_F(AutofillManagerTest, TestAutocheckoutBubbleNotShown) {
form_structure->DetermineHeuristicTypes(metrics_logger);
// Build form structure without server data.
- std::vector<AutofillFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types;
for (size_t i = 0; i < form.fields.size(); ++i) {
- heuristic_types.push_back(form_structure->field(i)->type());
+ heuristic_types.push_back(form_structure->field(i)->Type().server_type());
server_types.push_back(NO_SERVER_DATA);
}
form_structure->SetFieldTypes(heuristic_types, server_types);
@@ -3237,10 +3237,10 @@ TEST_F(AutofillManagerTest, DynamicFormsSeenAndIgnored) {
// Build and add form structure with server data.
scoped_ptr<TestFormStructure> form_structure(new TestFormStructure(address));
- std::vector<AutofillFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types;
for (size_t i = 0; i < address.fields.size(); ++i) {
heuristic_types.push_back(UNKNOWN_TYPE);
- server_types.push_back(form_structure->field(i)->type());
+ server_types.push_back(form_structure->field(i)->Type().server_type());
}
form_structure->SetFieldTypes(heuristic_types, server_types);
autofill_manager_->AddSeenForm(form_structure.release());
diff --git a/components/autofill/core/browser/autofill_merge_unittest.cc b/components/autofill/core/browser/autofill_merge_unittest.cc
index 39951ab..e13f494 100644
--- a/components/autofill/core/browser/autofill_merge_unittest.cc
+++ b/components/autofill/core/browser/autofill_merge_unittest.cc
@@ -30,7 +30,7 @@ const char kFieldSeparator[] = ": ";
const char kProfileSeparator[] = "---";
const size_t kFieldOffset = arraysize(kFieldSeparator) - 1;
-const AutofillFieldType kProfileFieldTypes[] = {
+const ServerFieldType kProfileFieldTypes[] = {
NAME_FIRST,
NAME_MIDDLE,
NAME_LAST,
@@ -63,7 +63,7 @@ std::string SerializeProfiles(const std::vector<AutofillProfile*>& profiles) {
result += kProfileSeparator;
result += "\n";
for (size_t j = 0; j < arraysize(kProfileFieldTypes); ++j) {
- AutofillFieldType type = kProfileFieldTypes[j];
+ ServerFieldType type = kProfileFieldTypes[j];
std::vector<base::string16> values;
profiles[i]->GetRawMultiInfo(type, &values);
for (size_t k = 0; k < values.size(); ++k) {
@@ -209,7 +209,7 @@ void AutofillMergeTest::MergeProfiles(const std::string& profiles,
// into the field's name.
AutofillField* field =
const_cast<AutofillField*>(form_structure.field(i));
- AutofillFieldType type =
+ ServerFieldType type =
AutofillType::StringToFieldType(UTF16ToUTF8(field->name));
field->set_heuristic_type(type);
}
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc
index 54582cc..57743c3 100644
--- a/components/autofill/core/browser/autofill_metrics.cc
+++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -79,7 +79,7 @@ enum FieldTypeGroupForMetrics {
//
// Clients must ensure that |field_type| is one of the types Chrome supports
// natively, e.g. |field_type| must not be a billng address.
-int GetFieldTypeGroupMetric(const AutofillFieldType field_type,
+int GetFieldTypeGroupMetric(const ServerFieldType field_type,
const int metric,
const int num_possible_metrics) {
DCHECK_LT(metric, num_possible_metrics);
@@ -250,7 +250,7 @@ void LogUMAHistogramLongTimes(const std::string& name,
void LogTypeQualityMetric(const std::string& base_name,
const int metric,
const int num_possible_metrics,
- const AutofillFieldType field_type,
+ const ServerFieldType field_type,
const std::string& experiment_id) {
DCHECK_LT(metric, num_possible_metrics);
@@ -481,7 +481,7 @@ void AutofillMetrics::LogDeveloperEngagementMetric(
void AutofillMetrics::LogHeuristicTypePrediction(
FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id) const {
LogTypeQualityMetric("Autofill.Quality.HeuristicType",
metric, NUM_FIELD_TYPE_QUALITY_METRICS,
@@ -490,7 +490,7 @@ void AutofillMetrics::LogHeuristicTypePrediction(
void AutofillMetrics::LogOverallTypePrediction(
FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id) const {
LogTypeQualityMetric("Autofill.Quality.PredictedType",
metric, NUM_FIELD_TYPE_QUALITY_METRICS,
@@ -499,7 +499,7 @@ void AutofillMetrics::LogOverallTypePrediction(
void AutofillMetrics::LogServerTypePrediction(
FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id) const {
LogTypeQualityMetric("Autofill.Quality.ServerType",
metric, NUM_FIELD_TYPE_QUALITY_METRICS,
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h
index bd0dfc9..05d3a8d 100644
--- a/components/autofill/core/browser/autofill_metrics.h
+++ b/components/autofill/core/browser/autofill_metrics.h
@@ -378,14 +378,14 @@ class AutofillMetrics {
virtual void LogHeuristicTypePrediction(
FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id) const;
virtual void LogOverallTypePrediction(
FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id) const;
virtual void LogServerTypePrediction(FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id) const;
virtual void LogQualityMetric(QualityMetric metric,
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc
index ce125fa..ece18d8 100644
--- a/components/autofill/core/browser/autofill_metrics_unittest.cc
+++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -51,15 +51,15 @@ class MockAutofillMetrics : public AutofillMetrics {
void(DeveloperEngagementMetric metric));
MOCK_CONST_METHOD3(LogHeuristicTypePrediction,
void(FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id));
MOCK_CONST_METHOD3(LogOverallTypePrediction,
void(FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id));
MOCK_CONST_METHOD3(LogServerTypePrediction,
void(FieldTypeQualityMetric metric,
- AutofillFieldType field_type,
+ ServerFieldType field_type,
const std::string& experiment_id));
MOCK_CONST_METHOD2(LogQualityMetric, void(QualityMetric metric,
const std::string& experiment_id));
@@ -158,8 +158,8 @@ class TestFormStructure : public FormStructure {
: FormStructure(form, std::string()) {}
virtual ~TestFormStructure() {}
- void SetFieldTypes(const std::vector<AutofillFieldType>& heuristic_types,
- const std::vector<AutofillFieldType>& server_types) {
+ void SetFieldTypes(const std::vector<ServerFieldType>& heuristic_types,
+ const std::vector<ServerFieldType>& server_types) {
ASSERT_EQ(field_count(), heuristic_types.size());
ASSERT_EQ(field_count(), server_types.size());
@@ -212,8 +212,8 @@ class TestAutofillManager : public AutofillManager {
}
void AddSeenForm(const FormData& form,
- const std::vector<AutofillFieldType>& heuristic_types,
- const std::vector<AutofillFieldType>& server_types,
+ const std::vector<ServerFieldType>& heuristic_types,
+ const std::vector<ServerFieldType>& server_types,
const std::string& experiment_id) {
FormData empty_form = form;
for (size_t i = 0; i < empty_form.fields.size(); ++i) {
@@ -339,7 +339,7 @@ TEST_F(AutofillMetricsTest, QualityMetrics) {
form.action = GURL("http://example.com/submit.html");
form.user_submitted = true;
- std::vector<AutofillFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types;
FormFieldData field;
test::CreateTestFormField(
@@ -488,8 +488,8 @@ TEST_F(AutofillMetricsTest, QualityMetricsForFailure) {
const char* label;
const char* name;
const char* value;
- AutofillFieldType heuristic_type;
- AutofillFieldType server_type;
+ ServerFieldType heuristic_type;
+ ServerFieldType server_type;
AutofillMetrics::QualityMetric heuristic_metric;
AutofillMetrics::QualityMetric server_metric;
} failure_cases[] = {
@@ -549,7 +549,7 @@ TEST_F(AutofillMetricsTest, QualityMetricsForFailure) {
}
};
- std::vector<AutofillFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types;
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(failure_cases); ++i) {
FormFieldData field;
test::CreateTestFormField(failure_cases[i].label,
@@ -602,7 +602,7 @@ TEST_F(AutofillMetricsTest, SaneMetricsWithCacheMismatch) {
form.action = GURL("http://example.com/submit.html");
form.user_submitted = true;
- std::vector<AutofillFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types;
FormFieldData field;
test::CreateTestFormField(
@@ -878,7 +878,7 @@ TEST_F(AutofillMetricsTest, QualityMetricsWithExperimentId) {
form.action = GURL("http://example.com/submit.html");
form.user_submitted = true;
- std::vector<AutofillFieldType> heuristic_types, server_types;
+ std::vector<ServerFieldType> heuristic_types, server_types;
FormFieldData field;
test::CreateTestFormField(
@@ -1031,7 +1031,7 @@ TEST_F(AutofillMetricsTest, AddressSuggestionsCount) {
form.user_submitted = true;
FormFieldData field;
- std::vector<AutofillFieldType> field_types;
+ std::vector<ServerFieldType> field_types;
test::CreateTestFormField("Name", "name", "", "text", &field);
form.fields.push_back(field);
field_types.push_back(NAME_FULL);
diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/autofill_profile.cc
index 653060a..f1577ed 100644
--- a/components/autofill/core/browser/autofill_profile.cc
+++ b/components/autofill/core/browser/autofill_profile.cc
@@ -32,13 +32,12 @@ namespace {
// Like |AutofillType::GetEquivalentFieldType()|, but also returns |NAME_FULL|
// for first, middle, and last name field types.
-AutofillFieldType GetEquivalentFieldTypeCollapsingNames(
- AutofillFieldType field_type) {
- if (field_type == NAME_FIRST || field_type == NAME_MIDDLE ||
- field_type == NAME_LAST || field_type == NAME_MIDDLE_INITIAL)
+ServerFieldType GetEquivalentFieldTypeCollapsingNames(ServerFieldType type) {
+ if (type == NAME_FIRST || type == NAME_MIDDLE || type == NAME_LAST ||
+ type == NAME_MIDDLE_INITIAL)
return NAME_FULL;
- return AutofillType::GetEquivalentFieldType(field_type);
+ return AutofillType::GetEquivalentFieldType(type);
}
// Fills |distinguishing_fields| with a list of fields to use when creating
@@ -49,10 +48,10 @@ AutofillFieldType GetEquivalentFieldTypeCollapsingNames(
// |UNKNOWN_TYPE| by convention. The resulting list of fields is sorted in
// decreasing order of importance.
void GetFieldsForDistinguishingProfiles(
- const std::vector<AutofillFieldType>* suggested_fields,
- AutofillFieldType excluded_field,
- std::vector<AutofillFieldType>* distinguishing_fields) {
- static const AutofillFieldType kDefaultDistinguishingFields[] = {
+ const std::vector<ServerFieldType>* suggested_fields,
+ ServerFieldType excluded_field,
+ std::vector<ServerFieldType>* distinguishing_fields) {
+ static const ServerFieldType kDefaultDistinguishingFields[] = {
NAME_FULL,
ADDRESS_HOME_LINE1,
ADDRESS_HOME_LINE2,
@@ -75,16 +74,15 @@ void GetFieldsForDistinguishingProfiles(
// Keep track of which fields we've seen so that we avoid duplicate entries.
// Always ignore fields of unknown type and the excluded field.
- std::set<AutofillFieldType> seen_fields;
+ std::set<ServerFieldType> seen_fields;
seen_fields.insert(UNKNOWN_TYPE);
seen_fields.insert(GetEquivalentFieldTypeCollapsingNames(excluded_field));
distinguishing_fields->clear();
- for (std::vector<AutofillFieldType>::const_iterator it =
+ for (std::vector<ServerFieldType>::const_iterator it =
suggested_fields->begin();
it != suggested_fields->end(); ++it) {
- AutofillFieldType suggested_type =
- GetEquivalentFieldTypeCollapsingNames(*it);
+ ServerFieldType suggested_type = GetEquivalentFieldTypeCollapsingNames(*it);
if (seen_fields.insert(suggested_type).second)
distinguishing_fields->push_back(suggested_type);
}
@@ -95,7 +93,7 @@ void GetFieldsForDistinguishingProfiles(
// distinguish between profiles that are identical except for the name.
if (excluded_field != NAME_FULL &&
GetEquivalentFieldTypeCollapsingNames(excluded_field) == NAME_FULL) {
- for (std::vector<AutofillFieldType>::const_iterator it =
+ for (std::vector<ServerFieldType>::const_iterator it =
suggested_fields->begin();
it != suggested_fields->end(); ++it) {
if (*it != excluded_field &&
@@ -110,7 +108,7 @@ void GetFieldsForDistinguishingProfiles(
// A helper function for string streaming. Concatenates multi-valued entries
// stored for a given |type| into a single string. This string is returned.
const base::string16 MultiString(const AutofillProfile& p,
- AutofillFieldType type) {
+ ServerFieldType type) {
std::vector<base::string16> values;
p.GetRawMultiInfo(type, &values);
base::string16 accumulate;
@@ -123,15 +121,15 @@ const base::string16 MultiString(const AutofillProfile& p,
}
base::string16 GetFormGroupInfo(const FormGroup& form_group,
- AutofillFieldType type,
+ const AutofillType& type,
const std::string& app_locale) {
return app_locale.empty() ?
- form_group.GetRawInfo(type) :
+ form_group.GetRawInfo(type.server_type()) :
form_group.GetInfo(type, app_locale);
}
template <class T>
-void CopyValuesToItems(AutofillFieldType type,
+void CopyValuesToItems(ServerFieldType type,
const std::vector<base::string16>& values,
std::vector<T>* form_group_items,
const T& prototype) {
@@ -146,7 +144,7 @@ void CopyValuesToItems(AutofillFieldType type,
}
template <class T>
-void CopyItemsToValues(AutofillFieldType type,
+void CopyItemsToValues(const AutofillType& type,
const std::vector<T>& form_group_items,
const std::string& app_locale,
std::vector<base::string16>* values) {
@@ -158,11 +156,11 @@ void CopyItemsToValues(AutofillFieldType type,
// Collapse compound field types to their "full" type. I.e. First name
// collapses to full name, area code collapses to full phone, etc.
-void CollapseCompoundFieldTypes(FieldTypeSet* type_set) {
- FieldTypeSet collapsed_set;
- for (FieldTypeSet::iterator iter = type_set->begin(); iter != type_set->end();
- ++iter) {
- switch (*iter) {
+void CollapseCompoundFieldTypes(ServerFieldTypeSet* type_set) {
+ ServerFieldTypeSet collapsed_set;
+ for (ServerFieldTypeSet::iterator it = type_set->begin();
+ it != type_set->end(); ++it) {
+ switch (*it) {
case NAME_FIRST:
case NAME_MIDDLE:
case NAME_LAST:
@@ -181,7 +179,7 @@ void CollapseCompoundFieldTypes(FieldTypeSet* type_set) {
break;
default:
- collapsed_set.insert(*iter);
+ collapsed_set.insert(*it);
}
}
std::swap(*type_set, collapsed_set);
@@ -267,41 +265,43 @@ AutofillProfile& AutofillProfile::operator=(const AutofillProfile& profile) {
return *this;
}
-void AutofillProfile::GetMatchingTypes(const base::string16& text,
- const std::string& app_locale,
- FieldTypeSet* matching_types) const {
+void AutofillProfile::GetMatchingTypes(
+ const base::string16& text,
+ const std::string& app_locale,
+ ServerFieldTypeSet* matching_types) const {
FormGroupList info = FormGroups();
for (FormGroupList::const_iterator it = info.begin(); it != info.end(); ++it)
(*it)->GetMatchingTypes(text, app_locale, matching_types);
}
-base::string16 AutofillProfile::GetRawInfo(AutofillFieldType type) const {
- AutofillFieldType return_type = AutofillType::GetEquivalentFieldType(type);
- const FormGroup* form_group = FormGroupForType(return_type);
+base::string16 AutofillProfile::GetRawInfo(ServerFieldType type) const {
+ ServerFieldType return_type = AutofillType::GetEquivalentFieldType(type);
+ const FormGroup* form_group = FormGroupForType(AutofillType(return_type));
if (!form_group)
return base::string16();
return form_group->GetRawInfo(return_type);
}
-void AutofillProfile::SetRawInfo(AutofillFieldType type,
+void AutofillProfile::SetRawInfo(ServerFieldType type,
const base::string16& value) {
- FormGroup* form_group = MutableFormGroupForType(type);
+ FormGroup* form_group = MutableFormGroupForType(AutofillType(type));
if (form_group)
form_group->SetRawInfo(type, CollapseWhitespace(value, false));
}
-base::string16 AutofillProfile::GetInfo(AutofillFieldType type,
- const std::string& app_locale) const {
- AutofillFieldType return_type = AutofillType::GetEquivalentFieldType(type);
- const FormGroup* form_group = FormGroupForType(return_type);
+base::string16 AutofillProfile::GetInfo(const AutofillType& type,
+ const std::string& app_locale) const {
+ ServerFieldType return_type =
+ AutofillType::GetEquivalentFieldType(type.server_type());
+ const FormGroup* form_group = FormGroupForType(AutofillType(return_type));
if (!form_group)
return base::string16();
- return form_group->GetInfo(return_type, app_locale);
+ return form_group->GetInfo(AutofillType(return_type), app_locale);
}
-bool AutofillProfile::SetInfo(AutofillFieldType type,
+bool AutofillProfile::SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) {
FormGroup* form_group = MutableFormGroupForType(type);
@@ -313,7 +313,7 @@ bool AutofillProfile::SetInfo(AutofillFieldType type,
}
void AutofillProfile::SetRawMultiInfo(
- AutofillFieldType type,
+ ServerFieldType type,
const std::vector<base::string16>& values) {
switch (AutofillType(type).group()) {
case NAME:
@@ -344,12 +344,12 @@ void AutofillProfile::SetRawMultiInfo(
}
void AutofillProfile::GetRawMultiInfo(
- AutofillFieldType type,
+ ServerFieldType type,
std::vector<base::string16>* values) const {
- GetMultiInfoImpl(type, std::string(), values);
+ GetMultiInfoImpl(AutofillType(type), std::string(), values);
}
-void AutofillProfile::GetMultiInfo(AutofillFieldType type,
+void AutofillProfile::GetMultiInfo(const AutofillType& type,
const std::string& app_locale,
std::vector<base::string16>* values) const {
GetMultiInfoImpl(type, app_locale, values);
@@ -359,11 +359,12 @@ void AutofillProfile::FillFormField(const AutofillField& field,
size_t variant,
const std::string& app_locale,
FormFieldData* field_data) const {
- AutofillFieldType type = field.type();
- DCHECK_NE(CREDIT_CARD, AutofillType(type).group());
+ AutofillType type = field.Type();
+ DCHECK_NE(CREDIT_CARD, type.group());
DCHECK(field_data);
- if (type == PHONE_HOME_NUMBER || type == PHONE_BILLING_NUMBER) {
+ if (type.server_type() == PHONE_HOME_NUMBER ||
+ type.server_type() == PHONE_BILLING_NUMBER) {
FillPhoneNumberField(field, variant, app_locale, field_data);
} else if (field_data->form_control_type == "select-one") {
FillSelectControl(type, app_locale, field_data);
@@ -385,7 +386,7 @@ void AutofillProfile::FillPhoneNumberField(const AutofillField& field,
const std::string& app_locale,
FormFieldData* field_data) const {
std::vector<base::string16> values;
- GetMultiInfo(field.type(), app_locale, &values);
+ GetMultiInfo(field.Type(), app_locale, &values);
DCHECK(variant < values.size());
// If we are filling a phone number, check to see if the size field
@@ -412,12 +413,12 @@ const base::string16 AutofillProfile::Label() const {
}
bool AutofillProfile::IsEmpty(const std::string& app_locale) const {
- FieldTypeSet types;
+ ServerFieldTypeSet types;
GetNonEmptyTypes(app_locale, &types);
return types.empty();
}
-bool AutofillProfile::IsPresentButInvalid(AutofillFieldType type) const {
+bool AutofillProfile::IsPresentButInvalid(ServerFieldType type) const {
std::string country = UTF16ToUTF8(GetRawInfo(ADDRESS_HOME_COUNTRY));
base::string16 data = GetRawInfo(type);
switch (type) {
@@ -447,13 +448,13 @@ bool AutofillProfile::IsPresentButInvalid(AutofillFieldType type) const {
int AutofillProfile::Compare(const AutofillProfile& profile) const {
- const AutofillFieldType single_value_types[] = { COMPANY_NAME,
- ADDRESS_HOME_LINE1,
- ADDRESS_HOME_LINE2,
- ADDRESS_HOME_CITY,
- ADDRESS_HOME_STATE,
- ADDRESS_HOME_ZIP,
- ADDRESS_HOME_COUNTRY };
+ const ServerFieldType single_value_types[] = { COMPANY_NAME,
+ ADDRESS_HOME_LINE1,
+ ADDRESS_HOME_LINE2,
+ ADDRESS_HOME_CITY,
+ ADDRESS_HOME_STATE,
+ ADDRESS_HOME_ZIP,
+ ADDRESS_HOME_COUNTRY };
for (size_t i = 0; i < arraysize(single_value_types); ++i) {
int comparison = GetRawInfo(single_value_types[i]).compare(
@@ -462,11 +463,11 @@ int AutofillProfile::Compare(const AutofillProfile& profile) const {
return comparison;
}
- const AutofillFieldType multi_value_types[] = { NAME_FIRST,
- NAME_MIDDLE,
- NAME_LAST,
- EMAIL_ADDRESS,
- PHONE_HOME_WHOLE_NUMBER };
+ const ServerFieldType multi_value_types[] = { NAME_FIRST,
+ NAME_MIDDLE,
+ NAME_LAST,
+ EMAIL_ADDRESS,
+ PHONE_HOME_WHOLE_NUMBER };
for (size_t i = 0; i < arraysize(multi_value_types); ++i) {
std::vector<base::string16> values_a;
@@ -503,30 +504,30 @@ const base::string16 AutofillProfile::PrimaryValue() const {
bool AutofillProfile::IsSubsetOf(const AutofillProfile& profile,
const std::string& app_locale) const {
- FieldTypeSet types;
+ ServerFieldTypeSet types;
GetNonEmptyTypes(app_locale, &types);
- for (FieldTypeSet::const_iterator iter = types.begin(); iter != types.end();
- ++iter) {
- if (*iter == NAME_FULL) {
+ for (ServerFieldTypeSet::const_iterator it = types.begin(); it != types.end();
+ ++it) {
+ if (*it == NAME_FULL) {
// Ignore the compound "full name" field type. We are only interested in
// comparing the constituent parts. For example, if |this| has a middle
// name saved, but |profile| lacks one, |profile| could still be a subset
// of |this|.
continue;
- } else if (AutofillType(*iter).group() == PHONE_HOME) {
+ } else if (AutofillType(*it).group() == PHONE_HOME) {
// Phone numbers should be canonicalized prior to being compared.
- if (*iter != PHONE_HOME_WHOLE_NUMBER) {
+ if (*it != PHONE_HOME_WHOLE_NUMBER) {
continue;
} else if (!i18n::PhoneNumbersMatch(
- GetRawInfo(*iter),
- profile.GetRawInfo(*iter),
+ GetRawInfo(*it),
+ profile.GetRawInfo(*it),
UTF16ToASCII(GetRawInfo(ADDRESS_HOME_COUNTRY)),
app_locale)) {
return false;
}
- } else if (StringToLowerASCII(GetRawInfo(*iter)) !=
- StringToLowerASCII(profile.GetRawInfo(*iter))) {
+ } else if (StringToLowerASCII(GetRawInfo(*it)) !=
+ StringToLowerASCII(profile.GetRawInfo(*it))) {
return false;
}
}
@@ -540,14 +541,14 @@ void AutofillProfile::OverwriteWithOrAddTo(const AutofillProfile& profile,
DCHECK(!IsVerified() || profile.IsVerified());
set_origin(profile.origin());
- FieldTypeSet field_types;
+ ServerFieldTypeSet field_types;
profile.GetNonEmptyTypes(app_locale, &field_types);
// Only transfer "full" types (e.g. full name) and not fragments (e.g.
// first name, last name).
CollapseCompoundFieldTypes(&field_types);
- for (FieldTypeSet::const_iterator iter = field_types.begin();
+ for (ServerFieldTypeSet::const_iterator iter = field_types.begin();
iter != field_types.end(); ++iter) {
if (AutofillProfile::SupportsMultiValue(*iter)) {
std::vector<base::string16> new_values;
@@ -588,7 +589,7 @@ void AutofillProfile::OverwriteWithOrAddTo(const AutofillProfile& profile,
}
// static
-bool AutofillProfile::SupportsMultiValue(AutofillFieldType type) {
+bool AutofillProfile::SupportsMultiValue(ServerFieldType type) {
FieldTypeGroup group = AutofillType(type).group();
return group == NAME ||
group == NAME_BILLING ||
@@ -620,14 +621,14 @@ bool AutofillProfile::AdjustInferredLabels(
// static
void AutofillProfile::CreateInferredLabels(
const std::vector<AutofillProfile*>* profiles,
- const std::vector<AutofillFieldType>* suggested_fields,
- AutofillFieldType excluded_field,
+ const std::vector<ServerFieldType>* suggested_fields,
+ ServerFieldType excluded_field,
size_t minimal_fields_shown,
std::vector<base::string16>* created_labels) {
DCHECK(profiles);
DCHECK(created_labels);
- std::vector<AutofillFieldType> fields_to_use;
+ std::vector<ServerFieldType> fields_to_use;
GetFieldsForDistinguishingProfiles(suggested_fields, excluded_field,
&fields_to_use);
@@ -660,7 +661,8 @@ void AutofillProfile::CreateInferredLabels(
}
}
-void AutofillProfile::GetSupportedTypes(FieldTypeSet* supported_types) const {
+void AutofillProfile::GetSupportedTypes(
+ ServerFieldTypeSet* supported_types) const {
FormGroupList info = FormGroups();
for (FormGroupList::const_iterator it = info.begin(); it != info.end(); ++it)
(*it)->GetSupportedTypes(supported_types);
@@ -689,10 +691,10 @@ bool AutofillProfile::FillCountrySelectControl(
}
void AutofillProfile::GetMultiInfoImpl(
- AutofillFieldType type,
+ const AutofillType& type,
const std::string& app_locale,
std::vector<base::string16>* values) const {
- switch (AutofillType(type).group()) {
+ switch (type.group()) {
case NAME:
case NAME_BILLING:
CopyItemsToValues(type, name_, app_locale, values);
@@ -726,14 +728,14 @@ void AutofillProfile::AddPhoneIfUnique(
}
base::string16 AutofillProfile::ConstructInferredLabel(
- const std::vector<AutofillFieldType>& included_fields,
+ const std::vector<ServerFieldType>& included_fields,
size_t num_fields_to_use) const {
const base::string16 separator =
l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_SUMMARY_SEPARATOR);
base::string16 label;
size_t num_fields_used = 0;
- for (std::vector<AutofillFieldType>::const_iterator it =
+ for (std::vector<ServerFieldType>::const_iterator it =
included_fields.begin();
it != included_fields.end() && num_fields_used < num_fields_to_use;
++it) {
@@ -754,14 +756,14 @@ base::string16 AutofillProfile::ConstructInferredLabel(
void AutofillProfile::CreateDifferentiatingLabels(
const std::vector<AutofillProfile*>& profiles,
const std::list<size_t>& indices,
- const std::vector<AutofillFieldType>& fields,
+ const std::vector<ServerFieldType>& fields,
size_t num_fields_to_include,
std::vector<base::string16>* created_labels) {
// For efficiency, we first construct a map of fields to their text values and
// each value's frequency.
- std::map<AutofillFieldType,
+ std::map<ServerFieldType,
std::map<base::string16, size_t> > field_text_frequencies_by_field;
- for (std::vector<AutofillFieldType>::const_iterator field = fields.begin();
+ for (std::vector<ServerFieldType>::const_iterator field = fields.begin();
field != fields.end(); ++field) {
std::map<base::string16, size_t>& field_text_frequencies =
field_text_frequencies_by_field[*field];
@@ -791,9 +793,9 @@ void AutofillProfile::CreateDifferentiatingLabels(
it != indices.end(); ++it) {
const AutofillProfile* profile = profiles[*it];
- std::vector<AutofillFieldType> label_fields;
+ std::vector<ServerFieldType> label_fields;
bool found_differentiating_field = false;
- for (std::vector<AutofillFieldType>::const_iterator field = fields.begin();
+ for (std::vector<ServerFieldType>::const_iterator field = fields.begin();
field != fields.end(); ++field) {
// Skip over empty fields.
base::string16 field_text = profile->GetRawInfo(*field);
@@ -838,36 +840,37 @@ AutofillProfile::FormGroupList AutofillProfile::FormGroups() const {
}
const FormGroup* AutofillProfile::FormGroupForType(
- AutofillFieldType type) const {
+ const AutofillType& type) const {
return const_cast<AutofillProfile*>(this)->MutableFormGroupForType(type);
}
-FormGroup* AutofillProfile::MutableFormGroupForType(AutofillFieldType type) {
- FormGroup* form_group = NULL;
- switch (AutofillType(type).group()) {
+FormGroup* AutofillProfile::MutableFormGroupForType(const AutofillType& type) {
+ switch (type.group()) {
case NAME:
case NAME_BILLING:
- form_group = &name_[0];
- break;
+ return &name_[0];
+
case EMAIL:
- form_group = &email_[0];
- break;
+ return &email_[0];
+
case COMPANY:
- form_group = &company_;
- break;
+ return &company_;
+
case PHONE_HOME:
case PHONE_BILLING:
- form_group = &phone_number_[0];
- break;
+ return &phone_number_[0];
+
case ADDRESS_HOME:
case ADDRESS_BILLING:
- form_group = &address_;
- break;
- default:
- break;
+ return &address_;
+
+ case NO_GROUP:
+ case CREDIT_CARD:
+ return NULL;
}
- return form_group;
+ NOTREACHED();
+ return NULL;
}
// So we can compare AutofillProfiles with EXPECT_EQ().
diff --git a/components/autofill/core/browser/autofill_profile.h b/components/autofill/core/browser/autofill_profile.h
index 49a488f..5a3f65c 100644
--- a/components/autofill/core/browser/autofill_profile.h
+++ b/components/autofill/core/browser/autofill_profile.h
@@ -18,7 +18,6 @@
#include "components/autofill/core/browser/autofill_data_model.h"
#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/contact_info.h"
-#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/phone_number.h"
namespace autofill {
@@ -41,15 +40,16 @@ class AutofillProfile : public AutofillDataModel {
AutofillProfile& operator=(const AutofillProfile& profile);
// FormGroup:
- virtual void GetMatchingTypes(const base::string16& text,
- const std::string& app_locale,
- FieldTypeSet* matching_types) const OVERRIDE;
- virtual base::string16 GetRawInfo(AutofillFieldType type) const OVERRIDE;
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual void GetMatchingTypes(
+ const base::string16& text,
+ const std::string& app_locale,
+ ServerFieldTypeSet* matching_types) const OVERRIDE;
+ virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE;
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) OVERRIDE;
- virtual base::string16 GetInfo(AutofillFieldType type,
- const std::string& app_locale) const OVERRIDE;
- virtual bool SetInfo(AutofillFieldType type,
+ virtual base::string16 GetInfo(const AutofillType& type,
+ const std::string& app_locale) const OVERRIDE;
+ virtual bool SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) OVERRIDE;
@@ -60,11 +60,11 @@ class AutofillProfile : public AutofillDataModel {
FormFieldData* field_data) const OVERRIDE;
// Multi-value equivalents to |GetInfo| and |SetInfo|.
- void SetRawMultiInfo(AutofillFieldType type,
+ void SetRawMultiInfo(ServerFieldType type,
const std::vector<base::string16>& values);
- void GetRawMultiInfo(AutofillFieldType type,
+ void GetRawMultiInfo(ServerFieldType type,
std::vector<base::string16>* values) const;
- void GetMultiInfo(AutofillFieldType type,
+ void GetMultiInfo(const AutofillType& type,
const std::string& app_locale,
std::vector<base::string16>* values) const;
@@ -87,7 +87,7 @@ class AutofillProfile : public AutofillDataModel {
// Returns true if the |type| of data in this profile is present, but invalid.
// Otherwise returns false.
- bool IsPresentButInvalid(AutofillFieldType type) const;
+ bool IsPresentButInvalid(ServerFieldType type) const;
// Comparison for Sync. Returns 0 if the profile is the same as |this|,
// or < 0, or > 0 if it is different. The implied ordering can be used for
@@ -119,7 +119,7 @@ class AutofillProfile : public AutofillDataModel {
const std::string& app_locale);
// Returns |true| if |type| accepts multi-values.
- static bool SupportsMultiValue(AutofillFieldType type);
+ static bool SupportsMultiValue(ServerFieldType type);
// Adjusts the labels according to profile data.
// Labels contain minimal different combination of:
@@ -144,8 +144,8 @@ class AutofillProfile : public AutofillDataModel {
// least |minimal_fields_shown| fields, if possible.
static void CreateInferredLabels(
const std::vector<AutofillProfile*>* profiles,
- const std::vector<AutofillFieldType>* suggested_fields,
- AutofillFieldType excluded_field,
+ const std::vector<ServerFieldType>* suggested_fields,
+ ServerFieldType excluded_field,
size_t minimal_fields_shown,
std::vector<base::string16>* created_labels);
@@ -155,12 +155,13 @@ class AutofillProfile : public AutofillDataModel {
// FormGroup:
virtual bool FillCountrySelectControl(const std::string& app_locale,
FormFieldData* field) const OVERRIDE;
- virtual void GetSupportedTypes(FieldTypeSet* supported_types) const OVERRIDE;
+ virtual void GetSupportedTypes(
+ ServerFieldTypeSet* supported_types) const OVERRIDE;
// Shared implementation for GetRawMultiInfo() and GetMultiInfo(). Pass an
// empty |app_locale| to get the raw info; otherwise, the returned info is
// canonicalized according to the given |app_locale|, if appropriate.
- void GetMultiInfoImpl(AutofillFieldType type,
+ void GetMultiInfoImpl(const AutofillType& type,
const std::string& app_locale,
std::vector<base::string16>* values) const;
@@ -176,7 +177,7 @@ class AutofillProfile : public AutofillDataModel {
// fields in |label_fields|. Uses as many fields as possible if there are not
// enough non-empty fields.
base::string16 ConstructInferredLabel(
- const std::vector<AutofillFieldType>& label_fields,
+ const std::vector<ServerFieldType>& label_fields,
size_t num_fields_to_include) const;
// Creates inferred labels for |profiles| at indices corresponding to
@@ -187,15 +188,15 @@ class AutofillProfile : public AutofillDataModel {
static void CreateDifferentiatingLabels(
const std::vector<AutofillProfile*>& profiles,
const std::list<size_t>& indices,
- const std::vector<AutofillFieldType>& fields,
+ const std::vector<ServerFieldType>& fields,
size_t num_fields_to_include,
std::vector<base::string16>* created_labels);
// Utilities for listing and lookup of the data members that constitute
// user-visible profile information.
FormGroupList FormGroups() const;
- const FormGroup* FormGroupForType(AutofillFieldType type) const;
- FormGroup* MutableFormGroupForType(AutofillFieldType type);
+ const FormGroup* FormGroupForType(const AutofillType& type) const;
+ FormGroup* MutableFormGroupForType(const AutofillType& type);
// The label presented to the user when selecting a profile.
base::string16 label_;
diff --git a/components/autofill/core/browser/autofill_profile_unittest.cc b/components/autofill/core/browser/autofill_profile_unittest.cc
index 1b7cfc7..f67c536 100644
--- a/components/autofill/core/browser/autofill_profile_unittest.cc
+++ b/components/autofill/core/browser/autofill_profile_unittest.cc
@@ -12,6 +12,7 @@
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_common_test.h"
#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/common/form_field_data.h"
#include "grit/component_strings.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -344,7 +345,7 @@ TEST(AutofillProfileTest, CreateInferredLabels) {
EXPECT_EQ(ASCIIToUTF16("Jane Doe, 123 Letha Shore., Dis"),
labels[1]);
- std::vector<AutofillFieldType> suggested_fields;
+ std::vector<ServerFieldType> suggested_fields;
suggested_fields.push_back(ADDRESS_HOME_CITY);
suggested_fields.push_back(ADDRESS_HOME_STATE);
suggested_fields.push_back(ADDRESS_HOME_ZIP);
@@ -422,7 +423,7 @@ TEST(AutofillProfileTest, CreateInferredLabelsFallsBackToFullName) {
// If the only name field in the suggested fields is the excluded field, we
// should not fall back to the full name as a distinguishing field.
- std::vector<AutofillFieldType> suggested_fields;
+ std::vector<ServerFieldType> suggested_fields;
suggested_fields.push_back(NAME_LAST);
suggested_fields.push_back(ADDRESS_HOME_LINE1);
suggested_fields.push_back(EMAIL_ADDRESS);
@@ -458,7 +459,7 @@ TEST(AutofillProfileTest, CreateInferredLabelsNoDuplicatedFields) {
// If the only name field in the suggested fields is the excluded field, we
// should not fall back to the full name as a distinguishing field.
- std::vector<AutofillFieldType> suggested_fields;
+ std::vector<ServerFieldType> suggested_fields;
suggested_fields.push_back(ADDRESS_HOME_LINE1);
suggested_fields.push_back(ADDRESS_BILLING_LINE1);
suggested_fields.push_back(EMAIL_ADDRESS);
@@ -787,7 +788,8 @@ TEST(AutofillProfileTest, AddressCountryFull) {
AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("CA"));
- profile.FillSelectControl(ADDRESS_HOME_COUNTRY, "en-US", &field);
+ profile.FillSelectControl(
+ AutofillType(ADDRESS_HOME_COUNTRY), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("Canada"), field.value);
}
@@ -807,7 +809,8 @@ TEST(AutofillProfileTest, AddressCountryAbbrev) {
AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("CA"));
- profile.FillSelectControl(ADDRESS_HOME_COUNTRY, "en-US", &field);
+ profile.FillSelectControl(
+ AutofillType(ADDRESS_HOME_COUNTRY), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("CA"), field.value);
}
@@ -827,7 +830,7 @@ TEST(AutofillProfileTest, AddressStateFull) {
AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA"));
- profile.FillSelectControl(ADDRESS_HOME_STATE, "en-US", &field);
+ profile.FillSelectControl(AutofillType(ADDRESS_HOME_STATE), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("California"), field.value);
}
@@ -847,7 +850,7 @@ TEST(AutofillProfileTest, AddressStateAbbrev) {
AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("California"));
- profile.FillSelectControl(ADDRESS_HOME_STATE, "en-US", &field);
+ profile.FillSelectControl(AutofillType(ADDRESS_HOME_STATE), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("CA"), field.value);
}
@@ -869,7 +872,7 @@ TEST(AutofillProfileTest, FillByValue) {
AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("California"));
- profile.FillSelectControl(ADDRESS_HOME_STATE, "en-US", &field);
+ profile.FillSelectControl(AutofillType(ADDRESS_HOME_STATE), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("California"), field.value);
}
@@ -891,7 +894,7 @@ TEST(AutofillProfileTest, FillByContents) {
AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/");
profile.SetRawInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("California"));
- profile.FillSelectControl(ADDRESS_HOME_STATE, "en-US", &field);
+ profile.FillSelectControl(AutofillType(ADDRESS_HOME_STATE), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("2"), field.value);
}
diff --git a/components/autofill/core/browser/autofill_server_field_info.h b/components/autofill/core/browser/autofill_server_field_info.h
index a748af1..e62cba7 100644
--- a/components/autofill/core/browser/autofill_server_field_info.h
+++ b/components/autofill/core/browser/autofill_server_field_info.h
@@ -13,7 +13,7 @@ namespace autofill {
struct AutofillServerFieldInfo {
// The predicted type returned by the Autofill server for this field.
- AutofillFieldType field_type;
+ ServerFieldType field_type;
// Default value to be used for the field (only applies to
// FIELD_WITH_DEFAULT_TYPE field type)
std::string default_value;
diff --git a/components/autofill/core/browser/autofill_type.cc b/components/autofill/core/browser/autofill_type.cc
index 10acc9e..14eeee0 100644
--- a/components/autofill/core/browser/autofill_type.cc
+++ b/components/autofill/core/browser/autofill_type.cc
@@ -10,14 +10,15 @@
namespace autofill {
-AutofillType::AutofillType(AutofillFieldType field_type) {
+AutofillType::AutofillType(ServerFieldType field_type) {
if ((field_type < NO_SERVER_DATA || field_type >= MAX_VALID_FIELD_TYPE) ||
(field_type >= 15 && field_type <= 19) ||
(field_type >= 25 && field_type <= 29) ||
- (field_type >= 44 && field_type <= 50))
- field_type_ = UNKNOWN_TYPE;
- else
- field_type_ = field_type;
+ (field_type >= 44 && field_type <= 50)) {
+ server_type_ = UNKNOWN_TYPE;
+ } else {
+ server_type_ = field_type;
+ }
}
AutofillType::AutofillType(const AutofillType& autofill_type) {
@@ -26,16 +27,12 @@ AutofillType::AutofillType(const AutofillType& autofill_type) {
AutofillType& AutofillType::operator=(const AutofillType& autofill_type) {
if (this != &autofill_type)
- this->field_type_ = autofill_type.field_type_;
+ this->server_type_ = autofill_type.server_type_;
return *this;
}
-AutofillFieldType AutofillType::field_type() const {
- return field_type_;
-}
-
FieldTypeGroup AutofillType::group() const {
- switch (field_type_) {
+ switch (server_type_) {
case NAME_FIRST:
case NAME_MIDDLE:
case NAME_LAST:
@@ -107,8 +104,8 @@ FieldTypeGroup AutofillType::group() const {
}
// static
-AutofillFieldType AutofillType::GetEquivalentFieldType(
- AutofillFieldType field_type) {
+ServerFieldType AutofillType::GetEquivalentFieldType(
+ ServerFieldType field_type) {
// When billing information is requested from the profile we map to the
// home address equivalents.
switch (field_type) {
@@ -172,8 +169,8 @@ AutofillFieldType AutofillType::GetEquivalentFieldType(
}
// static
-AutofillFieldType AutofillType::GetEquivalentBillingFieldType(
- AutofillFieldType field_type) {
+ServerFieldType AutofillType::GetEquivalentBillingFieldType(
+ ServerFieldType field_type) {
switch (field_type) {
case ADDRESS_HOME_LINE1:
return ADDRESS_BILLING_LINE1;
@@ -235,7 +232,7 @@ AutofillFieldType AutofillType::GetEquivalentBillingFieldType(
}
// static
-std::string AutofillType::FieldTypeToString(AutofillFieldType type) {
+std::string AutofillType::FieldTypeToString(ServerFieldType type) {
switch (type) {
case NO_SERVER_DATA:
return "NO_SERVER_DATA";
@@ -356,7 +353,7 @@ std::string AutofillType::FieldTypeToString(AutofillFieldType type) {
}
// static
-AutofillFieldType AutofillType::StringToFieldType(const std::string& str) {
+ServerFieldType AutofillType::StringToFieldType(const std::string& str) {
if (str == "NO_SERVER_DATA")
return NO_SERVER_DATA;
if (str == "UNKNOWN_TYPE")
@@ -448,7 +445,7 @@ AutofillFieldType AutofillType::StringToFieldType(const std::string& str) {
if (str == "COMPANY_NAME")
return COMPANY_NAME;
- NOTREACHED() << "Unknown AutofillFieldType " << str;
+ NOTREACHED() << "Unknown ServerFieldType " << str;
return UNKNOWN_TYPE;
}
diff --git a/components/autofill/core/browser/autofill_type.h b/components/autofill/core/browser/autofill_type.h
index c85bea1..a7d243c 100644
--- a/components/autofill/core/browser/autofill_type.h
+++ b/components/autofill/core/browser/autofill_type.h
@@ -15,29 +15,32 @@ namespace autofill {
// and for associating form fields with form values in the Web Database.
class AutofillType {
public:
- explicit AutofillType(AutofillFieldType field_type);
+ explicit AutofillType(ServerFieldType field_type);
AutofillType(const AutofillType& autofill_type);
AutofillType& operator=(const AutofillType& autofill_type);
- AutofillFieldType field_type() const;
+ // TODO(isherman): Audit all uses of this method.
+ ServerFieldType server_type() const { return server_type_; }
FieldTypeGroup group() const;
// Maps |field_type| to a field type that can be directly stored in a profile
// (in the sense that it makes sense to call |AutofillProfile::SetInfo()| with
// the returned field type as the first parameter).
- static AutofillFieldType GetEquivalentFieldType(AutofillFieldType field_type);
+ static ServerFieldType GetEquivalentFieldType(ServerFieldType field_type);
// Maps |field_type| to a field type from ADDRESS_BILLING FieldTypeGroup if
// field type is an Address type.
- static AutofillFieldType GetEquivalentBillingFieldType(
- AutofillFieldType field_type);
+ static ServerFieldType GetEquivalentBillingFieldType(
+ ServerFieldType field_type);
- // Utilities for serializing and deserializing an |AutofillFieldType|.
- static std::string FieldTypeToString(AutofillFieldType field_type);
- static AutofillFieldType StringToFieldType(const std::string& str);
+ // Utilities for serializing and deserializing a |ServerFieldType|.
+ // TODO(isherman): This should probably serialize an HTML type as well.
+ // Audit all uses of these functions.
+ static std::string FieldTypeToString(ServerFieldType field_type);
+ static ServerFieldType StringToFieldType(const std::string& str);
private:
- AutofillFieldType field_type_;
+ ServerFieldType server_type_;
};
} // namespace autofill
diff --git a/components/autofill/core/browser/autofill_type_unittest.cc b/components/autofill/core/browser/autofill_type_unittest.cc
index 8bff671..d9e8f9e 100644
--- a/components/autofill/core/browser/autofill_type_unittest.cc
+++ b/components/autofill/core/browser/autofill_type_unittest.cc
@@ -11,42 +11,42 @@ namespace {
TEST(AutofillTypeTest, AutofillTypes) {
// No server data.
AutofillType none(NO_SERVER_DATA);
- EXPECT_EQ(NO_SERVER_DATA, none.field_type());
+ EXPECT_EQ(NO_SERVER_DATA, none.server_type());
EXPECT_EQ(NO_GROUP, none.group());
// Unknown type.
AutofillType unknown(UNKNOWN_TYPE);
- EXPECT_EQ(UNKNOWN_TYPE, unknown.field_type());
+ EXPECT_EQ(UNKNOWN_TYPE, unknown.server_type());
EXPECT_EQ(NO_GROUP, unknown.group());
// Type with group but no subgroup.
AutofillType first(NAME_FIRST);
- EXPECT_EQ(NAME_FIRST, first.field_type());
+ EXPECT_EQ(NAME_FIRST, first.server_type());
EXPECT_EQ(NAME, first.group());
// Type with group and subgroup.
AutofillType phone(PHONE_HOME_NUMBER);
- EXPECT_EQ(PHONE_HOME_NUMBER, phone.field_type());
+ EXPECT_EQ(PHONE_HOME_NUMBER, phone.server_type());
EXPECT_EQ(PHONE_HOME, phone.group());
// Last value, to check any offset errors.
AutofillType last(COMPANY_NAME);
- EXPECT_EQ(COMPANY_NAME, last.field_type());
+ EXPECT_EQ(COMPANY_NAME, last.server_type());
EXPECT_EQ(COMPANY, last.group());
// Boundary (error) condition.
AutofillType boundary(MAX_VALID_FIELD_TYPE);
- EXPECT_EQ(UNKNOWN_TYPE, boundary.field_type());
+ EXPECT_EQ(UNKNOWN_TYPE, boundary.server_type());
EXPECT_EQ(NO_GROUP, boundary.group());
// Beyond the boundary (error) condition.
- AutofillType beyond(static_cast<AutofillFieldType>(MAX_VALID_FIELD_TYPE+10));
- EXPECT_EQ(UNKNOWN_TYPE, beyond.field_type());
+ AutofillType beyond(static_cast<ServerFieldType>(MAX_VALID_FIELD_TYPE+10));
+ EXPECT_EQ(UNKNOWN_TYPE, beyond.server_type());
EXPECT_EQ(NO_GROUP, beyond.group());
// In-between value. Missing from enum but within range. Error condition.
- AutofillType between(static_cast<AutofillFieldType>(16));
- EXPECT_EQ(UNKNOWN_TYPE, between.field_type());
+ AutofillType between(static_cast<ServerFieldType>(16));
+ EXPECT_EQ(UNKNOWN_TYPE, between.server_type());
EXPECT_EQ(NO_GROUP, between.group());
}
diff --git a/components/autofill/core/browser/autofill_xml_parser.cc b/components/autofill/core/browser/autofill_xml_parser.cc
index 972e42e..c1acbe90 100644
--- a/components/autofill/core/browser/autofill_xml_parser.cc
+++ b/components/autofill/core/browser/autofill_xml_parser.cc
@@ -100,7 +100,7 @@ void AutofillQueryXmlParser::StartElement(buzz::XmlParseContext* context,
if (attribute_name.compare("autofilltype") == 0) {
int value = GetIntValue(context, *attrs);
if (value >= 0 && value < MAX_VALID_FIELD_TYPE)
- field_info.field_type = static_cast<AutofillFieldType>(value);
+ field_info.field_type = static_cast<ServerFieldType>(value);
else
field_info.field_type = NO_SERVER_DATA;
} else if (field_info.field_type == FIELD_WITH_DEFAULT_VALUE &&
diff --git a/components/autofill/core/browser/contact_info.cc b/components/autofill/core/browser/contact_info.cc
index 11d6b2b..7ecf44d 100644
--- a/components/autofill/core/browser/contact_info.cc
+++ b/components/autofill/core/browser/contact_info.cc
@@ -13,11 +13,10 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/field_types.h"
namespace autofill {
-static const AutofillFieldType kAutofillNameInfoTypes[] = {
+static const ServerFieldType kAutofillNameInfoTypes[] = {
NAME_FIRST,
NAME_MIDDLE,
NAME_LAST
@@ -44,7 +43,7 @@ NameInfo& NameInfo::operator=(const NameInfo& info) {
return *this;
}
-void NameInfo::GetSupportedTypes(FieldTypeSet* supported_types) const {
+void NameInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
supported_types->insert(NAME_FIRST);
supported_types->insert(NAME_MIDDLE);
supported_types->insert(NAME_LAST);
@@ -52,7 +51,7 @@ void NameInfo::GetSupportedTypes(FieldTypeSet* supported_types) const {
supported_types->insert(NAME_FULL);
}
-base::string16 NameInfo::GetRawInfo(AutofillFieldType type) const {
+base::string16 NameInfo::GetRawInfo(ServerFieldType type) const {
type = AutofillType::GetEquivalentFieldType(type);
if (type == NAME_FIRST)
return first();
@@ -72,7 +71,7 @@ base::string16 NameInfo::GetRawInfo(AutofillFieldType type) const {
return base::string16();
}
-void NameInfo::SetRawInfo(AutofillFieldType type, const base::string16& value) {
+void NameInfo::SetRawInfo(ServerFieldType type, const base::string16& value) {
type = AutofillType::GetEquivalentFieldType(type);
DCHECK_EQ(NAME, AutofillType(type).group());
if (type == NAME_FIRST)
@@ -151,19 +150,18 @@ EmailInfo& EmailInfo::operator=(const EmailInfo& info) {
return *this;
}
-void EmailInfo::GetSupportedTypes(FieldTypeSet* supported_types) const {
+void EmailInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
supported_types->insert(EMAIL_ADDRESS);
}
-base::string16 EmailInfo::GetRawInfo(AutofillFieldType type) const {
+base::string16 EmailInfo::GetRawInfo(ServerFieldType type) const {
if (type == EMAIL_ADDRESS)
return email_;
return base::string16();
}
-void EmailInfo::SetRawInfo(AutofillFieldType type,
- const base::string16& value) {
+void EmailInfo::SetRawInfo(ServerFieldType type, const base::string16& value) {
DCHECK_EQ(EMAIL_ADDRESS, type);
email_ = value;
}
@@ -184,18 +182,18 @@ CompanyInfo& CompanyInfo::operator=(const CompanyInfo& info) {
return *this;
}
-void CompanyInfo::GetSupportedTypes(FieldTypeSet* supported_types) const {
+void CompanyInfo::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
supported_types->insert(COMPANY_NAME);
}
-base::string16 CompanyInfo::GetRawInfo(AutofillFieldType type) const {
+base::string16 CompanyInfo::GetRawInfo(ServerFieldType type) const {
if (type == COMPANY_NAME)
return company_name_;
return base::string16();
}
-void CompanyInfo::SetRawInfo(AutofillFieldType type,
+void CompanyInfo::SetRawInfo(ServerFieldType type,
const base::string16& value) {
DCHECK_EQ(COMPANY_NAME, type);
company_name_ = value;
diff --git a/components/autofill/core/browser/contact_info.h b/components/autofill/core/browser/contact_info.h
index dc57bc2..007be1b 100644
--- a/components/autofill/core/browser/contact_info.h
+++ b/components/autofill/core/browser/contact_info.h
@@ -10,7 +10,6 @@
#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "base/strings/string16.h"
-#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/form_group.h"
namespace autofill {
@@ -25,13 +24,14 @@ class NameInfo : public FormGroup {
NameInfo& operator=(const NameInfo& info);
// FormGroup:
- virtual base::string16 GetRawInfo(AutofillFieldType type) const OVERRIDE;
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE;
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) OVERRIDE;
private:
// FormGroup:
- virtual void GetSupportedTypes(FieldTypeSet* supported_types) const OVERRIDE;
+ virtual void GetSupportedTypes(
+ ServerFieldTypeSet* supported_types) const OVERRIDE;
// Returns the full name, which can include up to the first, middle, and last
// name.
@@ -63,13 +63,14 @@ class EmailInfo : public FormGroup {
EmailInfo& operator=(const EmailInfo& info);
// FormGroup:
- virtual base::string16 GetRawInfo(AutofillFieldType type) const OVERRIDE;
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE;
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) OVERRIDE;
private:
// FormGroup:
- virtual void GetSupportedTypes(FieldTypeSet* supported_types) const OVERRIDE;
+ virtual void GetSupportedTypes(
+ ServerFieldTypeSet* supported_types) const OVERRIDE;
base::string16 email_;
};
@@ -83,13 +84,14 @@ class CompanyInfo : public FormGroup {
CompanyInfo& operator=(const CompanyInfo& info);
// FormGroup:
- virtual base::string16 GetRawInfo(AutofillFieldType type) const OVERRIDE;
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE;
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) OVERRIDE;
private:
// FormGroup:
- virtual void GetSupportedTypes(FieldTypeSet* supported_types) const OVERRIDE;
+ virtual void GetSupportedTypes(
+ ServerFieldTypeSet* supported_types) const OVERRIDE;
base::string16 company_name_;
};
diff --git a/components/autofill/core/browser/credit_card.cc b/components/autofill/core/browser/credit_card.cc
index 8fc67ee..e627207 100644
--- a/components/autofill/core/browser/credit_card.cc
+++ b/components/autofill/core/browser/credit_card.cc
@@ -21,7 +21,6 @@
#include "components/autofill/core/browser/autofill_field.h"
#include "components/autofill/core/browser/autofill_regexes.h"
#include "components/autofill/core/browser/autofill_type.h"
-#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/validation.h"
#include "components/autofill/core/common/form_field_data.h"
#include "grit/component_strings.h"
@@ -276,7 +275,7 @@ std::string CreditCard::GetCreditCardType(const base::string16& number) {
return kGenericCard;
}
-base::string16 CreditCard::GetRawInfo(AutofillFieldType type) const {
+base::string16 CreditCard::GetRawInfo(ServerFieldType type) const {
switch (type) {
case CREDIT_CARD_NAME:
return name_on_card_;
@@ -322,7 +321,7 @@ base::string16 CreditCard::GetRawInfo(AutofillFieldType type) const {
}
}
-void CreditCard::SetRawInfo(AutofillFieldType type,
+void CreditCard::SetRawInfo(ServerFieldType type,
const base::string16& value) {
switch (type) {
case CREDIT_CARD_NAME:
@@ -370,33 +369,35 @@ void CreditCard::SetRawInfo(AutofillFieldType type,
}
}
-base::string16 CreditCard::GetInfo(AutofillFieldType type,
+base::string16 CreditCard::GetInfo(const AutofillType& type,
const std::string& app_locale) const {
- if (type == CREDIT_CARD_NUMBER)
+ if (type.server_type() == CREDIT_CARD_NUMBER)
return StripSeparators(number_);
- return GetRawInfo(type);
+ return GetRawInfo(type.server_type());
}
-bool CreditCard::SetInfo(AutofillFieldType type,
+bool CreditCard::SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) {
- if (type == CREDIT_CARD_NUMBER)
- SetRawInfo(type, StripSeparators(value));
- else if (type == CREDIT_CARD_EXP_MONTH)
+ ServerFieldType server_type = type.server_type();
+ if (server_type == CREDIT_CARD_NUMBER)
+ SetRawInfo(server_type, StripSeparators(value));
+ else if (server_type == CREDIT_CARD_EXP_MONTH)
SetExpirationMonthFromString(value, app_locale);
else
- SetRawInfo(type, value);
+ SetRawInfo(server_type, value);
return true;
}
void CreditCard::GetMatchingTypes(const base::string16& text,
const std::string& app_locale,
- FieldTypeSet* matching_types) const {
+ ServerFieldTypeSet* matching_types) const {
FormGroup::GetMatchingTypes(text, app_locale, matching_types);
- base::string16 card_number = GetInfo(CREDIT_CARD_NUMBER, app_locale);
+ base::string16 card_number =
+ GetInfo(AutofillType(CREDIT_CARD_NUMBER), app_locale);
if (!card_number.empty() && StripSeparators(text) == card_number)
matching_types->insert(CREDIT_CARD_NUMBER);
@@ -501,8 +502,8 @@ void CreditCard::operator=(const CreditCard& credit_card) {
bool CreditCard::UpdateFromImportedCard(const CreditCard& imported_card,
const std::string& app_locale) {
- if (this->GetInfo(CREDIT_CARD_NUMBER, app_locale) !=
- imported_card.GetInfo(CREDIT_CARD_NUMBER, app_locale)) {
+ if (this->GetInfo(AutofillType(CREDIT_CARD_NUMBER), app_locale) !=
+ imported_card.GetInfo(AutofillType(CREDIT_CARD_NUMBER), app_locale)) {
return false;
}
@@ -533,22 +534,24 @@ void CreditCard::FillFormField(const AutofillField& field,
size_t /*variant*/,
const std::string& app_locale,
FormFieldData* field_data) const {
- DCHECK_EQ(CREDIT_CARD, AutofillType(field.type()).group());
+ DCHECK_EQ(CREDIT_CARD, field.Type().group());
DCHECK(field_data);
if (field_data->form_control_type == "select-one") {
- FillSelectControl(field.type(), app_locale, field_data);
+ FillSelectControl(field.Type(), app_locale, field_data);
} else if (field_data->form_control_type == "month") {
// HTML5 input="month" consists of year-month.
- base::string16 year = GetInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, app_locale);
- base::string16 month = GetInfo(CREDIT_CARD_EXP_MONTH, app_locale);
+ base::string16 year =
+ GetInfo(AutofillType(CREDIT_CARD_EXP_4_DIGIT_YEAR), app_locale);
+ base::string16 month =
+ GetInfo(AutofillType(CREDIT_CARD_EXP_MONTH), app_locale);
if (!year.empty() && !month.empty()) {
// Fill the value only if |this| includes both year and month
// information.
field_data->value = year + ASCIIToUTF16("-") + month;
}
} else {
- field_data->value = GetInfo(field.type(), app_locale);
+ field_data->value = GetInfo(field.Type(), app_locale);
}
}
@@ -556,13 +559,13 @@ int CreditCard::Compare(const CreditCard& credit_card) const {
// The following CreditCard field types are the only types we store in the
// WebDB so far, so we're only concerned with matching these types in the
// credit card.
- const AutofillFieldType types[] = { CREDIT_CARD_NAME,
- CREDIT_CARD_NUMBER,
- CREDIT_CARD_EXP_MONTH,
- CREDIT_CARD_EXP_4_DIGIT_YEAR };
- for (size_t index = 0; index < arraysize(types); ++index) {
- int comparison = GetRawInfo(types[index]).compare(
- credit_card.GetRawInfo(types[index]));
+ const ServerFieldType types[] = { CREDIT_CARD_NAME,
+ CREDIT_CARD_NUMBER,
+ CREDIT_CARD_EXP_MONTH,
+ CREDIT_CARD_EXP_4_DIGIT_YEAR };
+ for (size_t i = 0; i < arraysize(types); ++i) {
+ int comparison =
+ GetRawInfo(types[i]).compare(credit_card.GetRawInfo(types[i]));
if (comparison != 0)
return comparison;
}
@@ -581,7 +584,7 @@ bool CreditCard::operator!=(const CreditCard& credit_card) const {
}
bool CreditCard::IsEmpty(const std::string& app_locale) const {
- FieldTypeSet types;
+ ServerFieldTypeSet types;
GetNonEmptyTypes(app_locale, &types);
return types.empty();
}
@@ -599,7 +602,7 @@ bool CreditCard::IsValid() const {
expiration_year_, expiration_month_, base::Time::Now());
}
-void CreditCard::GetSupportedTypes(FieldTypeSet* supported_types) const {
+void CreditCard::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
supported_types->insert(CREDIT_CARD_NAME);
supported_types->insert(CREDIT_CARD_NUMBER);
supported_types->insert(CREDIT_CARD_TYPE);
diff --git a/components/autofill/core/browser/credit_card.h b/components/autofill/core/browser/credit_card.h
index cf6384e..d5bf1a0 100644
--- a/components/autofill/core/browser/credit_card.h
+++ b/components/autofill/core/browser/credit_card.h
@@ -12,7 +12,6 @@
#include "base/compiler_specific.h"
#include "base/strings/string16.h"
#include "components/autofill/core/browser/autofill_data_model.h"
-#include "components/autofill/core/browser/field_types.h"
namespace autofill {
@@ -47,15 +46,16 @@ class CreditCard : public AutofillDataModel {
static std::string GetCreditCardType(const base::string16& number);
// FormGroup:
- virtual void GetMatchingTypes(const base::string16& text,
- const std::string& app_locale,
- FieldTypeSet* matching_types) const OVERRIDE;
- virtual base::string16 GetRawInfo(AutofillFieldType type) const OVERRIDE;
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual void GetMatchingTypes(
+ const base::string16& text,
+ const std::string& app_locale,
+ ServerFieldTypeSet* matching_types) const OVERRIDE;
+ virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE;
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) OVERRIDE;
- virtual base::string16 GetInfo(AutofillFieldType type,
+ virtual base::string16 GetInfo(const AutofillType& type,
const std::string& app_locale) const OVERRIDE;
- virtual bool SetInfo(AutofillFieldType type,
+ virtual bool SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) OVERRIDE;
@@ -122,7 +122,8 @@ class CreditCard : public AutofillDataModel {
private:
// FormGroup:
- virtual void GetSupportedTypes(FieldTypeSet* supported_types) const OVERRIDE;
+ virtual void GetSupportedTypes(
+ ServerFieldTypeSet* supported_types) const OVERRIDE;
// The month and year are zero if not present.
int Expiration4DigitYear() const { return expiration_year_; }
diff --git a/components/autofill/core/browser/credit_card_field.cc b/components/autofill/core/browser/credit_card_field.cc
index 267f7d9..bba804c 100644
--- a/components/autofill/core/browser/credit_card_field.cc
+++ b/components/autofill/core/browser/credit_card_field.cc
@@ -193,7 +193,7 @@ CreditCardField::CreditCardField()
is_two_digit_year_(false) {
}
-bool CreditCardField::ClassifyField(FieldTypeMap* map) const {
+bool CreditCardField::ClassifyField(ServerFieldTypeMap* map) const {
bool ok = AddClassification(number_, CREDIT_CARD_NUMBER, map);
ok = ok && AddClassification(type_, CREDIT_CARD_TYPE, map);
ok = ok && AddClassification(verification_, CREDIT_CARD_VERIFICATION_CODE,
diff --git a/components/autofill/core/browser/credit_card_field.h b/components/autofill/core/browser/credit_card_field.h
index 2b5cda3..119e1ab 100644
--- a/components/autofill/core/browser/credit_card_field.h
+++ b/components/autofill/core/browser/credit_card_field.h
@@ -24,7 +24,7 @@ class CreditCardField : public FormField {
protected:
// FormField:
- virtual bool ClassifyField(FieldTypeMap* map) const OVERRIDE;
+ virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE;
private:
FRIEND_TEST_ALL_PREFIXES(CreditCardFieldTest, ParseMiniumCreditCard);
diff --git a/components/autofill/core/browser/credit_card_field_unittest.cc b/components/autofill/core/browser/credit_card_field_unittest.cc
index 46875f2..9f60a1d 100644
--- a/components/autofill/core/browser/credit_card_field_unittest.cc
+++ b/components/autofill/core/browser/credit_card_field_unittest.cc
@@ -20,7 +20,7 @@ class CreditCardFieldTest : public testing::Test {
protected:
ScopedVector<const AutofillField> list_;
scoped_ptr<CreditCardField> field_;
- FieldTypeMap field_type_map_;
+ ServerFieldTypeMap field_type_map_;
// Downcast for tests.
static CreditCardField* Parse(AutofillScanner* scanner) {
diff --git a/components/autofill/core/browser/credit_card_unittest.cc b/components/autofill/core/browser/credit_card_unittest.cc
index c8b77bf..837d729 100644
--- a/components/autofill/core/browser/credit_card_unittest.cc
+++ b/components/autofill/core/browser/credit_card_unittest.cc
@@ -6,6 +6,7 @@
#include "base/guid.h"
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_common_test.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/credit_card.h"
#include "components/autofill/core/browser/validation.h"
#include "components/autofill/core/common/form_field_data.h"
@@ -327,11 +328,13 @@ TEST(CreditCardTest, SetExpirationMonth) {
EXPECT_EQ(ASCIIToUTF16("07"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
EXPECT_EQ(7, card.expiration_month());
- card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("January"), "en-US");
+ card.SetInfo(
+ AutofillType(CREDIT_CARD_EXP_MONTH), ASCIIToUTF16("January"), "en-US");
EXPECT_EQ(ASCIIToUTF16("01"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
EXPECT_EQ(1, card.expiration_month());
- card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("Apr"), "en-US");
+ card.SetInfo(
+ AutofillType(CREDIT_CARD_EXP_MONTH), ASCIIToUTF16("Apr"), "en-US");
EXPECT_EQ(ASCIIToUTF16("04"), card.GetRawInfo(CREDIT_CARD_EXP_MONTH));
EXPECT_EQ(4, card.expiration_month());
}
@@ -373,7 +376,8 @@ TEST(CreditCardTest, CreditCardMonthExact) {
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
- credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_EXP_MONTH), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("01"), field.value);
}
@@ -394,7 +398,8 @@ TEST(CreditCardTest, CreditCardMonthAbbreviated) {
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
- credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_EXP_MONTH), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("Jan"), field.value);
}
@@ -415,7 +420,8 @@ TEST(CreditCardTest, CreditCardMonthFull) {
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
- credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_EXP_MONTH), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("January"), field.value);
}
@@ -435,7 +441,8 @@ TEST(CreditCardTest, CreditCardMonthNumeric) {
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
- credit_card.FillSelectControl(CREDIT_CARD_EXP_MONTH, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_EXP_MONTH), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("1"), field.value);
}
@@ -455,7 +462,8 @@ TEST(CreditCardTest, CreditCardTwoDigitYear) {
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_EXP_4_DIGIT_YEAR, ASCIIToUTF16("2017"));
- credit_card.FillSelectControl(CREDIT_CARD_EXP_4_DIGIT_YEAR, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_EXP_4_DIGIT_YEAR), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("17"), field.value);
EXPECT_EQ(2017, credit_card.expiration_year());
}
@@ -483,7 +491,8 @@ TEST(CreditCardTest, CreditCardTypeSelectControl) {
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
ASCIIToUTF16("4111111111111111"));
- credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_TYPE), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("Visa"), field.value);
}
@@ -492,7 +501,8 @@ TEST(CreditCardTest, CreditCardTypeSelectControl) {
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
ASCIIToUTF16("5105105105105100"));
- credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_TYPE), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("Master Card"), field.value);
}
@@ -500,7 +510,8 @@ TEST(CreditCardTest, CreditCardTypeSelectControl) {
// American Express is sometimes abbreviated as AmEx:
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_NUMBER, ASCIIToUTF16("371449635398431"));
- credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_TYPE), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("AmEx"), field.value);
}
@@ -509,7 +520,8 @@ TEST(CreditCardTest, CreditCardTypeSelectControl) {
CreditCard credit_card(base::GenerateGUID(), "https://www.example.com/");
credit_card.SetRawInfo(CREDIT_CARD_NUMBER,
ASCIIToUTF16("6011111111111117"));
- credit_card.FillSelectControl(CREDIT_CARD_TYPE, "en-US", &field);
+ credit_card.FillSelectControl(
+ AutofillType(CREDIT_CARD_TYPE), "en-US", &field);
EXPECT_EQ(ASCIIToUTF16("discover"), field.value);
}
}
diff --git a/components/autofill/core/browser/email_field.cc b/components/autofill/core/browser/email_field.cc
index 7162c90..053ecec 100644
--- a/components/autofill/core/browser/email_field.cc
+++ b/components/autofill/core/browser/email_field.cc
@@ -25,7 +25,7 @@ FormField* EmailField::Parse(AutofillScanner* scanner) {
EmailField::EmailField(const AutofillField* field) : field_(field) {
}
-bool EmailField::ClassifyField(FieldTypeMap* map) const {
+bool EmailField::ClassifyField(ServerFieldTypeMap* map) const {
return AddClassification(field_, EMAIL_ADDRESS, map);
}
diff --git a/components/autofill/core/browser/email_field.h b/components/autofill/core/browser/email_field.h
index b6a08ea..4e270a1 100644
--- a/components/autofill/core/browser/email_field.h
+++ b/components/autofill/core/browser/email_field.h
@@ -17,7 +17,7 @@ class EmailField : public FormField {
protected:
// FormField:
- virtual bool ClassifyField(FieldTypeMap* map) const OVERRIDE;
+ virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE;
private:
explicit EmailField(const AutofillField* field);
diff --git a/components/autofill/core/browser/field_types.h b/components/autofill/core/browser/field_types.h
index 1e784d5..c083b39 100644
--- a/components/autofill/core/browser/field_types.h
+++ b/components/autofill/core/browser/field_types.h
@@ -17,8 +17,9 @@ namespace autofill {
// Autofill server, which is itself backward-compatible. The list must be kept
// up to date with the Autofill server list.
//
-// This is the list of all valid field types.
-enum AutofillFieldType {
+// The list of all field types natively understood by the Autofill server. A
+// subset of these types is used to store Autofill data in the user's profile.
+enum ServerFieldType {
// Server indication that it has no data for the requested field.
NO_SERVER_DATA = 0,
// Client indication that the text entered did not match anything in the
@@ -117,8 +118,8 @@ enum FieldTypeGroup {
CREDIT_CARD,
};
-typedef std::set<AutofillFieldType> FieldTypeSet;
-typedef std::map<base::string16, AutofillFieldType> FieldTypeMap;
+typedef std::set<ServerFieldType> ServerFieldTypeSet;
+typedef std::map<base::string16, ServerFieldType> ServerFieldTypeMap;
} // namespace autofill
diff --git a/components/autofill/core/browser/form_field.cc b/components/autofill/core/browser/form_field.cc
index 0bffc05..2e00112 100644
--- a/components/autofill/core/browser/form_field.cc
+++ b/components/autofill/core/browser/form_field.cc
@@ -19,7 +19,6 @@
#include "components/autofill/core/browser/autofill_scanner.h"
#include "components/autofill/core/browser/credit_card_field.h"
#include "components/autofill/core/browser/email_field.h"
-#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/form_structure.h"
#include "components/autofill/core/browser/name_field.h"
#include "components/autofill/core/browser/phone_field.h"
@@ -52,7 +51,7 @@ bool IsCheckable(const AutofillField* field) {
// static
void FormField::ParseFormFields(const std::vector<AutofillField*>& fields,
- FieldTypeMap* map) {
+ ServerFieldTypeMap* map) {
// Set up a working copy of the fields to be processed.
std::vector<const AutofillField*> remaining_fields(fields.size());
std::copy(fields.begin(), fields.end(), remaining_fields.begin());
@@ -126,8 +125,8 @@ bool FormField::ParseEmptyLabel(AutofillScanner* scanner,
// static
bool FormField::AddClassification(const AutofillField* field,
- AutofillFieldType type,
- FieldTypeMap* map) {
+ ServerFieldType type,
+ ServerFieldTypeMap* map) {
// Several fields are optional.
if (!field)
return true;
@@ -176,7 +175,7 @@ bool FormField::Match(const AutofillField* field,
// static
void FormField::ParseFormFieldsPass(ParseFunction parse,
std::vector<const AutofillField*>* fields,
- FieldTypeMap* map) {
+ ServerFieldTypeMap* map) {
// Store unmatched fields for further processing by the caller.
std::vector<const AutofillField*> remaining_fields;
diff --git a/components/autofill/core/browser/form_field.h b/components/autofill/core/browser/form_field.h
index 67099b2..dbb937f 100644
--- a/components/autofill/core/browser/form_field.h
+++ b/components/autofill/core/browser/form_field.h
@@ -10,7 +10,7 @@
#include "base/basictypes.h"
#include "base/gtest_prod_util.h"
#include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/field_types.h"
namespace autofill {
@@ -28,7 +28,7 @@ class FormField {
// The association is stored into |map|. Each field has a derived unique name
// that is used as the key into the |map|.
static void ParseFormFields(const std::vector<AutofillField*>& fields,
- FieldTypeMap* map);
+ ServerFieldTypeMap* map);
protected:
// A bit-field used for matching specific parts of a field in question.
@@ -76,14 +76,14 @@ class FormField {
// Adds an association between a field and a type to |map|.
static bool AddClassification(const AutofillField* field,
- AutofillFieldType type,
- FieldTypeMap* map);
+ ServerFieldType type,
+ ServerFieldTypeMap* map);
// Derived classes must implement this interface to supply field type
// information. |ParseFormFields| coordinates the parsing and extraction
// of types from an input vector of |AutofillField| objects and delegates
// the type extraction via this method.
- virtual bool ClassifyField(FieldTypeMap* map) const = 0;
+ virtual bool ClassifyField(ServerFieldTypeMap* map) const = 0;
private:
FRIEND_TEST_ALL_PREFIXES(FormFieldTest, Match);
@@ -114,7 +114,7 @@ class FormField {
// Classification results of the processed fields are stored in |map|.
static void ParseFormFieldsPass(ParseFunction parse,
std::vector<const AutofillField*>* fields,
- FieldTypeMap* map);
+ ServerFieldTypeMap* map);
DISALLOW_COPY_AND_ASSIGN(FormField);
};
diff --git a/components/autofill/core/browser/form_field_unittest.cc b/components/autofill/core/browser/form_field_unittest.cc
index 9a535bb..5014b71 100644
--- a/components/autofill/core/browser/form_field_unittest.cc
+++ b/components/autofill/core/browser/form_field_unittest.cc
@@ -138,7 +138,7 @@ TEST(FormFieldTest, ParseFormFields) {
field_data.label = ASCIIToUTF16("Address line2");
fields.push_back(new AutofillField(field_data, field_data.label));
- FieldTypeMap field_type_map;
+ ServerFieldTypeMap field_type_map;
FormField::ParseFormFields(fields.get(), &field_type_map);
// Checkable element shouldn't interfere with inference of Address line2.
EXPECT_EQ(2U, field_type_map.size());
diff --git a/components/autofill/core/browser/form_group.cc b/components/autofill/core/browser/form_group.cc
index 052d2b7..7114ee2 100644
--- a/components/autofill/core/browser/form_group.cc
+++ b/components/autofill/core/browser/form_group.cc
@@ -4,48 +4,47 @@
#include "components/autofill/core/browser/form_group.h"
+#include "components/autofill/core/browser/autofill_type.h"
+
namespace autofill {
void FormGroup::GetMatchingTypes(const base::string16& text,
const std::string& app_locale,
- FieldTypeSet* matching_types) const {
+ ServerFieldTypeSet* matching_types) const {
if (text.empty()) {
matching_types->insert(EMPTY_TYPE);
return;
}
- FieldTypeSet types;
+ ServerFieldTypeSet types;
GetSupportedTypes(&types);
- for (FieldTypeSet::const_iterator type = types.begin();
+ for (ServerFieldTypeSet::const_iterator type = types.begin();
type != types.end(); ++type) {
- // TODO(isherman): Matches are case-sensitive for now. Let's keep an eye on
- // this and decide whether there are compelling reasons to add case-
- // insensitivity.
- if (GetInfo(*type, app_locale) == text)
+ if (GetInfo(AutofillType(*type), app_locale) == text)
matching_types->insert(*type);
}
}
void FormGroup::GetNonEmptyTypes(const std::string& app_locale,
- FieldTypeSet* non_empty_types) const {
- FieldTypeSet types;
+ ServerFieldTypeSet* non_empty_types) const {
+ ServerFieldTypeSet types;
GetSupportedTypes(&types);
- for (FieldTypeSet::const_iterator type = types.begin();
+ for (ServerFieldTypeSet::const_iterator type = types.begin();
type != types.end(); ++type) {
- if (!GetInfo(*type, app_locale).empty())
+ if (!GetInfo(AutofillType(*type), app_locale).empty())
non_empty_types->insert(*type);
}
}
-base::string16 FormGroup::GetInfo(AutofillFieldType type,
- const std::string& app_locale) const {
- return GetRawInfo(type);
+base::string16 FormGroup::GetInfo(const AutofillType& type,
+ const std::string& app_locale) const {
+ return GetRawInfo(type.server_type());
}
-bool FormGroup::SetInfo(AutofillFieldType type,
+bool FormGroup::SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) {
- SetRawInfo(type, value);
+ SetRawInfo(type.server_type(), value);
return true;
}
diff --git a/components/autofill/core/browser/form_group.h b/components/autofill/core/browser/form_group.h
index 714112c..86bd453 100644
--- a/components/autofill/core/browser/form_group.h
+++ b/components/autofill/core/browser/form_group.h
@@ -12,6 +12,8 @@
namespace autofill {
+class AutofillType;
+
// This class is an interface for collections of form fields, grouped by type.
class FormGroup {
public:
@@ -23,31 +25,31 @@ class FormGroup {
// additive on |matching_types|.
virtual void GetMatchingTypes(const base::string16& text,
const std::string& app_locale,
- FieldTypeSet* matching_types) const;
+ ServerFieldTypeSet* matching_types) const;
- // Returns a set of AutofillFieldTypes for which this FormGroup has non-empty
+ // Returns a set of server field types for which this FormGroup has non-empty
// data. This method is additive on |non_empty_types|.
virtual void GetNonEmptyTypes(const std::string& app_locale,
- FieldTypeSet* non_empty_types) const;
+ ServerFieldTypeSet* non_empty_types) const;
// Returns the string associated with |type|, without canonicalizing the
// returned value. For user-visible strings, use GetInfo() instead.
- virtual base::string16 GetRawInfo(AutofillFieldType type) const = 0;
+ virtual base::string16 GetRawInfo(ServerFieldType type) const = 0;
// Sets this FormGroup object's data for |type| to |value|, without
// canonicalizing the |value|. For data that has not already been
// canonicalized, use SetInfo() instead.
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) = 0;
// Returns the string that should be auto-filled into a text field given the
// type of that field, localized to the given |app_locale| if appropriate.
- virtual base::string16 GetInfo(AutofillFieldType type,
+ virtual base::string16 GetInfo(const AutofillType& type,
const std::string& app_locale) const;
// Used to populate this FormGroup object with data. Canonicalizes the data
// according to the specified |app_locale| prior to storing, if appropriate.
- virtual bool SetInfo(AutofillFieldType type,
+ virtual bool SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale);
@@ -56,9 +58,9 @@ class FormGroup {
// non-AutofillProfile type, for which mere inheritance is insufficient.
friend class AutofillProfile;
- // Returns a set of AutofillFieldTypes for which this FormGroup can store
+ // Returns a set of server field types for which this FormGroup can store
// data. This method is additive on |supported_types|.
- virtual void GetSupportedTypes(FieldTypeSet* supported_types) const = 0;
+ virtual void GetSupportedTypes(ServerFieldTypeSet* supported_types) const = 0;
};
} // namespace autofill
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc
index 3c49b45..d502a0d 100644
--- a/components/autofill/core/browser/form_structure.cc
+++ b/components/autofill/core/browser/form_structure.cc
@@ -65,14 +65,15 @@ const char kIgnorePatternInFieldName[] = "\\d{5,}+";
// Helper for |EncodeUploadRequest()| that creates a bit field corresponding to
// |available_field_types| and returns the hex representation as a string.
-std::string EncodeFieldTypes(const FieldTypeSet& available_field_types) {
+std::string EncodeFieldTypes(const ServerFieldTypeSet& available_field_types) {
// There are |MAX_VALID_FIELD_TYPE| different field types and 8 bits per byte,
// so we need ceil(MAX_VALID_FIELD_TYPE / 8) bytes to encode the bit field.
const size_t kNumBytes = (MAX_VALID_FIELD_TYPE + 0x7) / 8;
// Pack the types in |available_field_types| into |bit_field|.
std::vector<uint8> bit_field(kNumBytes, 0);
- for (FieldTypeSet::const_iterator field_type = available_field_types.begin();
+ for (ServerFieldTypeSet::const_iterator field_type =
+ available_field_types.begin();
field_type != available_field_types.end();
++field_type) {
// Set the appropriate bit in the field. The bit we set is the one
@@ -107,9 +108,9 @@ void EncodeFieldForUpload(const AutofillField& field,
if (field.is_checkable)
return;
- FieldTypeSet types = field.possible_types();
+ ServerFieldTypeSet types = field.possible_types();
// |types| could be empty in unit-tests only.
- for (FieldTypeSet::iterator field_type = types.begin();
+ for (ServerFieldTypeSet::iterator field_type = types.begin();
field_type != types.end(); ++field_type) {
buzz::XmlElement *field_element = new buzz::XmlElement(
buzz::QName(kXMLElementField));
@@ -137,8 +138,8 @@ void EncodeFieldForQuery(const AutofillField& field,
// in field assignments xml, and also add them to the parent XmlElement.
void EncodeFieldForFieldAssignments(const AutofillField& field,
buzz::XmlElement* parent) {
- FieldTypeSet types = field.possible_types();
- for (FieldTypeSet::iterator field_type = types.begin();
+ ServerFieldTypeSet types = field.possible_types();
+ for (ServerFieldTypeSet::iterator field_type = types.begin();
field_type != types.end(); ++field_type) {
buzz::XmlElement *field_element = new buzz::XmlElement(
buzz::QName(kXMLElementFields));
@@ -164,8 +165,9 @@ bool IsContactTypeHint(const std::string& token) {
// Returns |true| iff the |token| is a type hint appropriate for a field of the
// given |field_type|, as specified in the implementation section of
// http://is.gd/whatwg_autocomplete
+// TODO(isherman): This should use HTML field types, not native ones.
bool ContactTypeHintMatchesFieldType(const std::string& token,
- AutofillFieldType field_type) {
+ ServerFieldType field_type) {
// The "home" and "work" type hints are only appropriate for email and phone
// number field types.
if (token == "home" || token == "work") {
@@ -189,7 +191,8 @@ bool ContactTypeHintMatchesFieldType(const std::string& token,
// |autocomplete_type|, if there is one, in the context of the given |field|.
// Chrome Autofill supports a subset of the field types listed at
// http://is.gd/whatwg_autocomplete
-AutofillFieldType FieldTypeFromAutocompleteType(
+// TODO(isherman): This should use HTML field types, not native ones.
+ServerFieldType FieldTypeFromAutocompleteType(
const std::string& autocomplete_type,
const AutofillField& field) {
if (autocomplete_type == "name")
@@ -379,11 +382,12 @@ void FormStructure::DetermineHeuristicTypes(
&has_author_specified_sections);
if (!has_author_specified_types_) {
- FieldTypeMap field_type_map;
+ ServerFieldTypeMap field_type_map;
FormField::ParseFormFields(fields_.get(), &field_type_map);
- for (size_t index = 0; index < field_count(); index++) {
- AutofillField* field = fields_[index];
- FieldTypeMap::iterator iter = field_type_map.find(field->unique_name());
+ for (size_t i = 0; i < field_count(); ++i) {
+ AutofillField* field = fields_[i];
+ ServerFieldTypeMap::iterator iter =
+ field_type_map.find(field->unique_name());
if (iter != field_type_map.end())
field->set_heuristic_type(iter->second);
}
@@ -403,7 +407,7 @@ void FormStructure::DetermineHeuristicTypes(
}
bool FormStructure::EncodeUploadRequest(
- const FieldTypeSet& available_field_types,
+ const ServerFieldTypeSet& available_field_types,
bool form_was_autofilled,
std::string* encoded_xml) const {
DCHECK(ShouldBeCrowdsourced());
@@ -413,7 +417,8 @@ bool FormStructure::EncodeUploadRequest(
for (std::vector<AutofillField*>::const_iterator field = begin();
field != end();
++field) {
- for (FieldTypeSet::const_iterator type = (*field)->possible_types().begin();
+ for (ServerFieldTypeSet::const_iterator type =
+ (*field)->possible_types().begin();
type != (*field)->possible_types().end();
++type) {
DCHECK(*type == UNKNOWN_TYPE ||
@@ -448,7 +453,7 @@ bool FormStructure::EncodeUploadRequest(
}
bool FormStructure::EncodeFieldAssignments(
- const FieldTypeSet& available_field_types,
+ const ServerFieldTypeSet& available_field_types,
std::string* encoded_xml) const {
DCHECK(ShouldBeCrowdsourced());
@@ -597,12 +602,12 @@ void FormStructure::ParseQueryResponse(
// UNKNOWN_TYPE is reserved for use by the client.
DCHECK_NE(current_info->field_type, UNKNOWN_TYPE);
- AutofillFieldType heuristic_type = (*field)->type();
+ ServerFieldType heuristic_type = (*field)->heuristic_type();
if (heuristic_type != UNKNOWN_TYPE)
heuristics_detected_fillable_field = true;
(*field)->set_server_type(current_info->field_type);
- if (heuristic_type != (*field)->type())
+ if (heuristic_type != (*field)->Type().server_type())
query_response_overrode_heuristics = true;
// Copy default value into the field if available.
@@ -658,7 +663,7 @@ void FormStructure::GetFieldTypePredictions(
annotated_field.server_type =
AutofillType::FieldTypeToString((*field)->server_type());
annotated_field.overall_type =
- AutofillType::FieldTypeToString((*field)->type());
+ AutofillType::FieldTypeToString((*field)->Type().server_type());
form.fields.push_back(annotated_field);
}
@@ -806,7 +811,7 @@ void FormStructure::LogQualityMetrics(
// No further logging for empty fields nor for fields where the entered data
// does not appear to already exist in the user's stored Autofill data.
- const FieldTypeSet& field_types = field->possible_types();
+ const ServerFieldTypeSet& field_types = field->possible_types();
DCHECK(!field_types.empty());
if (field_types.count(EMPTY_TYPE) || field_types.count(UNKNOWN_TYPE))
continue;
@@ -819,8 +824,8 @@ void FormStructure::LogQualityMetrics(
// Collapse field types that Chrome treats as identical, e.g. home and
// billing address fields.
- FieldTypeSet collapsed_field_types;
- for (FieldTypeSet::const_iterator it = field_types.begin();
+ ServerFieldTypeSet collapsed_field_types;
+ for (ServerFieldTypeSet::const_iterator it = field_types.begin();
it != field_types.end();
++it) {
// Since we currently only support US phone numbers, the (city code + main
@@ -834,13 +839,13 @@ void FormStructure::LogQualityMetrics(
}
// Capture the field's type, if it is unambiguous.
- AutofillFieldType field_type = UNKNOWN_TYPE;
+ ServerFieldType field_type = UNKNOWN_TYPE;
if (collapsed_field_types.size() == 1)
field_type = *collapsed_field_types.begin();
- AutofillFieldType heuristic_type = field->heuristic_type();
- AutofillFieldType server_type = field->server_type();
- AutofillFieldType predicted_type = field->type();
+ ServerFieldType heuristic_type = field->heuristic_type();
+ ServerFieldType server_type = field->server_type();
+ ServerFieldType predicted_type = field->Type().server_type();
// Log heuristic, server, and overall type quality metrics, independently of
// whether the field was autofilled.
@@ -1127,7 +1132,7 @@ void FormStructure::ParseFieldTypesFromAutocompleteAttributes(
DCHECK(!tokens.empty());
std::string field_type_token = tokens.back();
tokens.pop_back();
- AutofillFieldType field_type =
+ ServerFieldType field_type =
FieldTypeFromAutocompleteType(field_type_token, *field);
if (field_type == UNKNOWN_TYPE)
continue;
@@ -1205,13 +1210,13 @@ void FormStructure::IdentifySections(bool has_author_specified_sections) {
base::string16 current_section = fields_.front()->unique_name();
// Keep track of the types we've seen in this section.
- std::set<AutofillFieldType> seen_types;
- AutofillFieldType previous_type = UNKNOWN_TYPE;
+ std::set<ServerFieldType> seen_types;
+ ServerFieldType previous_type = UNKNOWN_TYPE;
for (std::vector<AutofillField*>::iterator field = fields_.begin();
field != fields_.end(); ++field) {
- const AutofillFieldType current_type =
- AutofillType::GetEquivalentFieldType((*field)->type());
+ const ServerFieldType current_type =
+ AutofillType::GetEquivalentFieldType((*field)->Type().server_type());
bool already_saw_current_type = seen_types.count(current_type) > 0;
@@ -1250,7 +1255,7 @@ void FormStructure::IdentifySections(bool has_author_specified_sections) {
// This simplifies the section-aware logic in autofill_manager.cc.
for (std::vector<AutofillField*>::iterator field = fields_.begin();
field != fields_.end(); ++field) {
- FieldTypeGroup field_type_group = AutofillType((*field)->type()).group();
+ FieldTypeGroup field_type_group = (*field)->Type().group();
if (field_type_group == CREDIT_CARD)
(*field)->set_section((*field)->section() + "-cc");
else
diff --git a/components/autofill/core/browser/form_structure.h b/components/autofill/core/browser/form_structure.h
index bfb2c5b..8b914b1 100644
--- a/components/autofill/core/browser/form_structure.h
+++ b/components/autofill/core/browser/form_structure.h
@@ -64,7 +64,7 @@ class FormStructure {
void DetermineHeuristicTypes(const AutofillMetrics& metric_logger);
// Encodes the XML upload request from this FormStructure.
- bool EncodeUploadRequest(const FieldTypeSet& available_field_types,
+ bool EncodeUploadRequest(const ServerFieldTypeSet& available_field_types,
bool form_was_autofilled,
std::string* encoded_xml) const;
@@ -72,7 +72,7 @@ class FormStructure {
// This XML will be written VLOG only, never be sent to server. It will
// help make FieldAssignments and feed back to autofill server as
// experiment data.
- bool EncodeFieldAssignments(const FieldTypeSet& available_field_types,
+ bool EncodeFieldAssignments(const ServerFieldTypeSet& available_field_types,
std::string* encoded_xml) const;
// Encodes the XML query request for the set of forms.
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc
index d494fbe..73343f8 100644
--- a/components/autofill/core/browser/form_structure_unittest.cc
+++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -1667,7 +1667,7 @@ TEST(FormStructureTest, EncodeQueryRequest) {
TEST(FormStructureTest, EncodeUploadRequest) {
scoped_ptr<FormStructure> form_structure;
- std::vector<FieldTypeSet> possible_field_types;
+ std::vector<ServerFieldTypeSet> possible_field_types;
FormData form;
form.method = ASCIIToUTF16("post");
form_structure.reset(new FormStructure(form, std::string()));
@@ -1679,34 +1679,34 @@ TEST(FormStructureTest, EncodeUploadRequest) {
field.label = ASCIIToUTF16("First Name");
field.name = ASCIIToUTF16("firstname");
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(NAME_FIRST);
field.label = ASCIIToUTF16("Last Name");
field.name = ASCIIToUTF16("lastname");
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(NAME_LAST);
field.label = ASCIIToUTF16("Email");
field.name = ASCIIToUTF16("email");
field.form_control_type = "email";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(EMAIL_ADDRESS);
field.label = ASCIIToUTF16("Phone");
field.name = ASCIIToUTF16("phone");
field.form_control_type = "number";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(PHONE_HOME_WHOLE_NUMBER);
field.label = ASCIIToUTF16("Country");
field.name = ASCIIToUTF16("country");
field.form_control_type = "select-one";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(ADDRESS_HOME_COUNTRY);
// Add checkable field.
@@ -1715,7 +1715,7 @@ TEST(FormStructureTest, EncodeUploadRequest) {
checkable_field.label = ASCIIToUTF16("Checkable1");
checkable_field.name = ASCIIToUTF16("Checkable1");
form.fields.push_back(checkable_field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(ADDRESS_HOME_COUNTRY);
form_structure.reset(new FormStructure(form, std::string()));
@@ -1724,7 +1724,7 @@ TEST(FormStructureTest, EncodeUploadRequest) {
for (size_t i = 0; i < form_structure->field_count(); ++i)
form_structure->field(i)->set_possible_types(possible_field_types[i]);
- FieldTypeSet available_field_types;
+ ServerFieldTypeSet available_field_types;
available_field_types.insert(NAME_FIRST);
available_field_types.insert(NAME_LAST);
available_field_types.insert(ADDRESS_HOME_LINE1);
@@ -1769,7 +1769,7 @@ TEST(FormStructureTest, EncodeUploadRequest) {
field.name = ASCIIToUTF16("address");
field.form_control_type = "text";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(ADDRESS_HOME_LINE1);
possible_field_types.back().insert(ADDRESS_HOME_LINE2);
possible_field_types.back().insert(ADDRESS_BILLING_LINE1);
@@ -1809,7 +1809,7 @@ TEST(FormStructureTest, EncodeUploadRequest) {
field.name = ASCIIToUTF16("address");
field.form_control_type = "text";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(ADDRESS_HOME_LINE1);
possible_field_types.back().insert(ADDRESS_HOME_LINE2);
possible_field_types.back().insert(ADDRESS_BILLING_LINE1);
@@ -1825,7 +1825,7 @@ TEST(FormStructureTest, EncodeUploadRequest) {
TEST(FormStructureTest, EncodeFieldAssignments) {
scoped_ptr<FormStructure> form_structure;
- std::vector<FieldTypeSet> possible_field_types;
+ std::vector<ServerFieldTypeSet> possible_field_types;
FormData form;
form.method = ASCIIToUTF16("post");
form_structure.reset(new FormStructure(form, std::string()));
@@ -1837,34 +1837,34 @@ TEST(FormStructureTest, EncodeFieldAssignments) {
field.label = ASCIIToUTF16("First Name");
field.name = ASCIIToUTF16("firstname");
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(NAME_FIRST);
field.label = ASCIIToUTF16("Last Name");
field.name = ASCIIToUTF16("lastname");
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(NAME_LAST);
field.label = ASCIIToUTF16("Email");
field.name = ASCIIToUTF16("email");
field.form_control_type = "email";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(EMAIL_ADDRESS);
field.label = ASCIIToUTF16("Phone");
field.name = ASCIIToUTF16("phone");
field.form_control_type = "number";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(PHONE_HOME_WHOLE_NUMBER);
field.label = ASCIIToUTF16("Country");
field.name = ASCIIToUTF16("country");
field.form_control_type = "select-one";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(ADDRESS_HOME_COUNTRY);
// Add checkable field.
@@ -1873,7 +1873,7 @@ TEST(FormStructureTest, EncodeFieldAssignments) {
checkable_field.label = ASCIIToUTF16("Checkable1");
checkable_field.name = ASCIIToUTF16("Checkable1");
form.fields.push_back(checkable_field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(ADDRESS_HOME_COUNTRY);
form_structure.reset(new FormStructure(form, std::string()));
@@ -1882,7 +1882,7 @@ TEST(FormStructureTest, EncodeFieldAssignments) {
for (size_t i = 0; i < form_structure->field_count(); ++i)
form_structure->field(i)->set_possible_types(possible_field_types[i]);
- FieldTypeSet available_field_types;
+ ServerFieldTypeSet available_field_types;
available_field_types.insert(NAME_FIRST);
available_field_types.insert(NAME_LAST);
available_field_types.insert(ADDRESS_HOME_LINE1);
@@ -1914,7 +1914,7 @@ TEST(FormStructureTest, EncodeFieldAssignments) {
field.name = ASCIIToUTF16("address");
field.form_control_type = "text";
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(ADDRESS_HOME_LINE1);
possible_field_types.back().insert(ADDRESS_HOME_LINE2);
possible_field_types.back().insert(ADDRESS_BILLING_LINE1);
@@ -1972,7 +1972,7 @@ TEST(FormStructureTest, CheckDataPresence) {
FormStructure form_structure(form, std::string());
- FieldTypeSet unknown_type;
+ ServerFieldTypeSet unknown_type;
unknown_type.insert(UNKNOWN_TYPE);
for (size_t i = 0; i < form_structure.field_count(); ++i)
form_structure.field(i)->set_possible_types(unknown_type);
@@ -1980,7 +1980,7 @@ TEST(FormStructureTest, CheckDataPresence) {
// No available types.
// datapresent should be "" == trimmmed(0x0000000000000000) ==
// 0b0000000000000000000000000000000000000000000000000000000000000000
- FieldTypeSet available_field_types;
+ ServerFieldTypeSet available_field_types;
std::string encoded_xml;
EXPECT_TRUE(form_structure.EncodeUploadRequest(available_field_types, false,
@@ -2193,7 +2193,7 @@ TEST(FormStructureTest, CheckMultipleTypes) {
// 33 == ADDRESS_HOME_CITY
// 34 == ADDRESS_HOME_STATE
// 60 == COMPANY_NAME
- FieldTypeSet available_field_types;
+ ServerFieldTypeSet available_field_types;
available_field_types.insert(NAME_FIRST);
available_field_types.insert(NAME_LAST);
available_field_types.insert(EMAIL_ADDRESS);
@@ -2205,7 +2205,7 @@ TEST(FormStructureTest, CheckMultipleTypes) {
// Check that multiple types for the field are processed correctly.
scoped_ptr<FormStructure> form_structure;
- std::vector<FieldTypeSet> possible_field_types;
+ std::vector<ServerFieldTypeSet> possible_field_types;
FormData form;
form.method = ASCIIToUTF16("post");
@@ -2215,25 +2215,25 @@ TEST(FormStructureTest, CheckMultipleTypes) {
field.label = ASCIIToUTF16("email");
field.name = ASCIIToUTF16("email");
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(EMAIL_ADDRESS);
field.label = ASCIIToUTF16("First Name");
field.name = ASCIIToUTF16("first");
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(NAME_FIRST);
field.label = ASCIIToUTF16("Last Name");
field.name = ASCIIToUTF16("last");
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(NAME_LAST);
field.label = ASCIIToUTF16("Address");
field.name = ASCIIToUTF16("address");
form.fields.push_back(field);
- possible_field_types.push_back(FieldTypeSet());
+ possible_field_types.push_back(ServerFieldTypeSet());
possible_field_types.back().insert(ADDRESS_HOME_LINE1);
form_structure.reset(new FormStructure(form, std::string()));
diff --git a/components/autofill/core/browser/name_field.cc b/components/autofill/core/browser/name_field.cc
index 435537e..de74ba1 100644
--- a/components/autofill/core/browser/name_field.cc
+++ b/components/autofill/core/browser/name_field.cc
@@ -23,7 +23,7 @@ class FullNameField : public NameField {
protected:
// FormField:
- virtual bool ClassifyField(FieldTypeMap* map) const OVERRIDE;
+ virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE;
private:
explicit FullNameField(const AutofillField* field);
@@ -42,7 +42,7 @@ class FirstLastNameField : public NameField {
protected:
// FormField:
- virtual bool ClassifyField(FieldTypeMap* map) const OVERRIDE;
+ virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE;
private:
FirstLastNameField();
@@ -69,7 +69,7 @@ FormField* NameField::Parse(AutofillScanner* scanner) {
}
// This is overriden in concrete subclasses.
-bool NameField::ClassifyField(FieldTypeMap* map) const {
+bool NameField::ClassifyField(ServerFieldTypeMap* map) const {
return false;
}
@@ -92,7 +92,7 @@ FullNameField* FullNameField::Parse(AutofillScanner* scanner) {
return NULL;
}
-bool FullNameField::ClassifyField(FieldTypeMap* map) const {
+bool FullNameField::ClassifyField(ServerFieldTypeMap* map) const {
return AddClassification(field_, NAME_FULL, map);
}
@@ -206,10 +206,10 @@ FirstLastNameField::FirstLastNameField()
middle_initial_(false) {
}
-bool FirstLastNameField::ClassifyField(FieldTypeMap* map) const {
+bool FirstLastNameField::ClassifyField(ServerFieldTypeMap* map) const {
bool ok = AddClassification(first_name_, NAME_FIRST, map);
ok = ok && AddClassification(last_name_, NAME_LAST, map);
- AutofillFieldType type = middle_initial_ ? NAME_MIDDLE_INITIAL : NAME_MIDDLE;
+ ServerFieldType type = middle_initial_ ? NAME_MIDDLE_INITIAL : NAME_MIDDLE;
ok = ok && AddClassification(middle_name_, type, map);
return ok;
}
diff --git a/components/autofill/core/browser/name_field.h b/components/autofill/core/browser/name_field.h
index ada8a30..e15e7e3 100644
--- a/components/autofill/core/browser/name_field.h
+++ b/components/autofill/core/browser/name_field.h
@@ -25,7 +25,7 @@ class NameField : public FormField {
NameField() {}
// FormField:
- virtual bool ClassifyField(FieldTypeMap* map) const OVERRIDE;
+ virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE;
private:
FRIEND_TEST_ALL_PREFIXES(NameFieldTest, FirstMiddleLast);
diff --git a/components/autofill/core/browser/name_field_unittest.cc b/components/autofill/core/browser/name_field_unittest.cc
index 0abe631..df6a29b 100644
--- a/components/autofill/core/browser/name_field_unittest.cc
+++ b/components/autofill/core/browser/name_field_unittest.cc
@@ -20,7 +20,7 @@ class NameFieldTest : public testing::Test {
protected:
ScopedVector<const AutofillField> list_;
scoped_ptr<NameField> field_;
- FieldTypeMap field_type_map_;
+ ServerFieldTypeMap field_type_map_;
// Downcast for tests.
static NameField* Parse(AutofillScanner* scanner) {
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc
index d7fb291..c14723d 100644
--- a/components/autofill/core/browser/personal_data_manager.cc
+++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -109,21 +109,22 @@ bool IsMinimumAddress(const AutofillProfile& profile,
// Return true if the |field_type| and |value| are valid within the context
// of importing a form.
-bool IsValidFieldTypeAndValue(const std::set<AutofillFieldType>& types_seen,
- AutofillFieldType field_type,
+bool IsValidFieldTypeAndValue(const std::set<ServerFieldType>& types_seen,
+ ServerFieldType field_type,
const base::string16& value) {
// Abandon the import if two fields of the same type are encountered.
// This indicates ambiguous data or miscategorization of types.
// Make an exception for PHONE_HOME_NUMBER however as both prefix and
// suffix are stored against this type, and for EMAIL_ADDRESS because it is
// common to see second 'confirm email address' fields on forms.
- if (types_seen.count(field_type) && field_type != PHONE_HOME_NUMBER &&
+ if (types_seen.count(field_type) &&
+ field_type != PHONE_HOME_NUMBER &&
field_type != EMAIL_ADDRESS)
return false;
// Abandon the import if an email address value shows up in a field that is
// not an email address.
- if (field_type != EMAIL_ADDRESS && autofill::IsValidEmailAddress(value))
+ if (field_type != EMAIL_ADDRESS && IsValidEmailAddress(value))
return false;
return true;
@@ -240,7 +241,9 @@ bool PersonalDataManager::ImportFormData(
int importable_credit_card_fields = 0;
// Detect and discard forms with multiple fields of the same type.
- std::set<AutofillFieldType> types_seen;
+ // TODO(isherman): Some types are overlapping but not equal, e.g. phone number
+ // parts, address parts.
+ std::set<ServerFieldType> types_seen;
// We only set complete phone, so aggregate phone parts in these vars and set
// complete at the end.
@@ -255,15 +258,16 @@ bool PersonalDataManager::ImportFormData(
if (!field->IsFieldFillable() || value.empty())
continue;
- AutofillFieldType field_type = field->type();
- FieldTypeGroup group(AutofillType(field_type).group());
+ AutofillType field_type = field->Type();
+ ServerFieldType server_field_type = field_type.server_type();
+ FieldTypeGroup group(field_type.group());
// There can be multiple email fields (e.g. in the case of 'confirm email'
// fields) but they must all contain the same value, else the profile is
// invalid.
- if (field_type == EMAIL_ADDRESS) {
- if (types_seen.count(field_type) &&
- imported_profile->GetRawInfo(field_type) != value) {
+ if (server_field_type == EMAIL_ADDRESS) {
+ if (types_seen.count(server_field_type) &&
+ imported_profile->GetRawInfo(EMAIL_ADDRESS) != value) {
imported_profile.reset();
break;
}
@@ -271,17 +275,17 @@ bool PersonalDataManager::ImportFormData(
// If the |field_type| and |value| don't pass basic validity checks then
// abandon the import.
- if (!IsValidFieldTypeAndValue(types_seen, field_type, value)) {
+ if (!IsValidFieldTypeAndValue(types_seen, server_field_type, value)) {
imported_profile.reset();
local_imported_credit_card.reset();
break;
}
- types_seen.insert(field_type);
+ types_seen.insert(server_field_type);
if (group == CREDIT_CARD) {
if (LowerCaseEqualsASCII(field->form_control_type, "month")) {
- DCHECK_EQ(CREDIT_CARD_EXP_MONTH, field_type);
+ DCHECK_EQ(CREDIT_CARD_EXP_MONTH, server_field_type);
local_imported_credit_card->SetInfoForMonthInputType(value);
} else {
local_imported_credit_card->SetInfo(field_type, value, app_locale_);
@@ -296,7 +300,7 @@ bool PersonalDataManager::ImportFormData(
imported_profile->SetInfo(field_type, value, app_locale_);
// Reject profiles with invalid country information.
- if (field_type == ADDRESS_HOME_COUNTRY &&
+ if (server_field_type == ADDRESS_HOME_COUNTRY &&
!value.empty() &&
imported_profile->GetRawInfo(ADDRESS_HOME_COUNTRY).empty()) {
imported_profile.reset();
@@ -310,7 +314,8 @@ bool PersonalDataManager::ImportFormData(
base::string16 constructed_number;
if (!home.ParseNumber(*imported_profile, app_locale_,
&constructed_number) ||
- !imported_profile->SetInfo(PHONE_HOME_WHOLE_NUMBER, constructed_number,
+ !imported_profile->SetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER),
+ constructed_number,
app_locale_)) {
imported_profile.reset();
}
@@ -521,7 +526,7 @@ CreditCard* PersonalDataManager::GetCreditCardByGUID(const std::string& guid) {
}
void PersonalDataManager::GetNonEmptyTypes(
- FieldTypeSet* non_empty_types) {
+ ServerFieldTypeSet* non_empty_types) {
const std::vector<AutofillProfile*>& profiles = GetProfiles();
for (std::vector<AutofillProfile*>::const_iterator iter = profiles.begin();
iter != profiles.end(); ++iter) {
@@ -569,10 +574,10 @@ void PersonalDataManager::Refresh() {
}
void PersonalDataManager::GetProfileSuggestions(
- AutofillFieldType type,
+ const AutofillType& type,
const base::string16& field_contents,
bool field_is_autofilled,
- std::vector<AutofillFieldType> other_field_types,
+ std::vector<ServerFieldType> other_field_types,
std::vector<base::string16>* values,
std::vector<base::string16>* labels,
std::vector<base::string16>* icons,
@@ -612,9 +617,11 @@ void PersonalDataManager::GetProfileSuggestions(
// Phone numbers could be split in US forms, so field value could be
// either prefix or suffix of the phone.
bool matched_phones = false;
- if (type == PHONE_HOME_NUMBER && !field_value_lower_case.empty() &&
- (profile_value_lower_case.find(field_value_lower_case) !=
- base::string16::npos)) {
+ if ((type.server_type() == PHONE_HOME_NUMBER ||
+ type.server_type() == PHONE_BILLING_NUMBER) &&
+ !field_value_lower_case.empty() &&
+ profile_value_lower_case.find(field_value_lower_case) !=
+ base::string16::npos) {
matched_phones = true;
}
@@ -639,7 +646,7 @@ void PersonalDataManager::GetProfileSuggestions(
if (!field_is_autofilled) {
AutofillProfile::CreateInferredLabels(
&matched_profiles, &other_field_types,
- type, 1, labels);
+ type.server_type(), 1, labels);
} else {
// No sub-labels for previously filled fields.
labels->resize(values->size());
@@ -650,7 +657,7 @@ void PersonalDataManager::GetProfileSuggestions(
}
void PersonalDataManager::GetCreditCardSuggestions(
- AutofillFieldType type,
+ const AutofillType& type,
const base::string16& field_contents,
std::vector<base::string16>* values,
std::vector<base::string16>* labels,
@@ -671,13 +678,14 @@ void PersonalDataManager::GetCreditCardSuggestions(
credit_card->GetInfo(type, app_locale_);
if (!creditcard_field_value.empty() &&
StartsWith(creditcard_field_value, field_contents, false)) {
- if (type == CREDIT_CARD_NUMBER)
+ if (type.server_type() == CREDIT_CARD_NUMBER)
creditcard_field_value = credit_card->ObfuscatedNumber();
base::string16 label;
if (credit_card->number().empty()) {
// If there is no CC number, return name to show something.
- label = credit_card->GetInfo(CREDIT_CARD_NAME, app_locale_);
+ label =
+ credit_card->GetInfo(AutofillType(CREDIT_CARD_NAME), app_locale_);
} else {
label = kCreditCardPrefix;
label.append(credit_card->LastFourDigits());
@@ -704,7 +712,7 @@ bool PersonalDataManager::IsValidLearnableProfile(
return false;
base::string16 email = profile.GetRawInfo(EMAIL_ADDRESS);
- if (!email.empty() && !autofill::IsValidEmailAddress(email))
+ if (!email.empty() && !IsValidEmailAddress(email))
return false;
// Reject profiles with invalid US state information.
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h
index 36e578f..b9ab979 100644
--- a/components/autofill/core/browser/personal_data_manager.h
+++ b/components/autofill/core/browser/personal_data_manager.h
@@ -109,7 +109,7 @@ class PersonalDataManager : public WebDataServiceConsumer,
CreditCard* GetCreditCardByGUID(const std::string& guid);
// Gets the field types availabe in the stored address and credit card data.
- void GetNonEmptyTypes(FieldTypeSet* non_empty_types);
+ void GetNonEmptyTypes(ServerFieldTypeSet* non_empty_types);
// Returns true if the credit card information is stored with a password.
bool HasPassword();
@@ -130,10 +130,10 @@ class PersonalDataManager : public WebDataServiceConsumer,
// has already been autofilled. |other_field_types| represents the rest of
// form. Identifying info is loaded into the last four outparams.
void GetProfileSuggestions(
- AutofillFieldType type,
+ const AutofillType& type,
const base::string16& field_contents,
bool field_is_autofilled,
- std::vector<AutofillFieldType> other_field_types,
+ std::vector<ServerFieldType> other_field_types,
std::vector<base::string16>* values,
std::vector<base::string16>* labels,
std::vector<base::string16>* icons,
@@ -143,7 +143,7 @@ class PersonalDataManager : public WebDataServiceConsumer,
// GetProfileSuggestions for argument descriptions. The variant in each
// GUID pair should be ignored.
void GetCreditCardSuggestions(
- AutofillFieldType type,
+ const AutofillType& type,
const base::string16& field_contents,
std::vector<base::string16>* values,
std::vector<base::string16>* labels,
diff --git a/components/autofill/core/browser/personal_data_manager_mac.mm b/components/autofill/core/browser/personal_data_manager_mac.mm
index d63283f..409fdc1 100644
--- a/components/autofill/core/browser/personal_data_manager_mac.mm
+++ b/components/autofill/core/browser/personal_data_manager_mac.mm
@@ -18,6 +18,7 @@
#include "base/strings/sys_string_conversions.h"
#include "components/autofill/core/browser/autofill_country.h"
#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/phone_number.h"
#include "grit/component_strings.h"
#include "ui/base/l10n/l10n_util_mac.h"
@@ -203,7 +204,7 @@ void AuxiliaryProfilesImpl::GetAddressBookAddress(const std::string& app_locale,
profile->SetRawInfo(ADDRESS_HOME_ZIP, base::SysNSStringToUTF16(zip));
if (NSString* country = [address objectForKey:kABAddressCountryKey]) {
- profile->SetInfo(ADDRESS_HOME_COUNTRY,
+ profile->SetInfo(AutofillType(ADDRESS_HOME_COUNTRY),
base::SysNSStringToUTF16(country),
app_locale);
}
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc
index 2e22324..7c08e5f 100644
--- a/components/autofill/core/browser/personal_data_manager_unittest.cc
+++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -2132,7 +2132,7 @@ TEST_F(PersonalDataManagerTest, SaveImportedCreditCardWithVerifiedData) {
TEST_F(PersonalDataManagerTest, GetNonEmptyTypes) {
// Check that there are no available types with no profiles stored.
- FieldTypeSet non_empty_types;
+ ServerFieldTypeSet non_empty_types;
personal_data_->GetNonEmptyTypes(&non_empty_types);
EXPECT_EQ(0U, non_empty_types.size());
diff --git a/components/autofill/core/browser/phone_field.cc b/components/autofill/core/browser/phone_field.cc
index ee1e4e6c..6d156e9 100644
--- a/components/autofill/core/browser/phone_field.cc
+++ b/components/autofill/core/browser/phone_field.cc
@@ -196,7 +196,7 @@ FormField* PhoneField::Parse(AutofillScanner* scanner) {
return phone_field.release();
}
-bool PhoneField::ClassifyField(FieldTypeMap* map) const {
+bool PhoneField::ClassifyField(ServerFieldTypeMap* map) const {
bool ok = true;
DCHECK(parsed_phone_fields_[FIELD_PHONE]); // Phone was correctly parsed.
@@ -210,7 +210,7 @@ bool PhoneField::ClassifyField(FieldTypeMap* map) const {
map);
}
- AutofillFieldType field_number_type = PHONE_HOME_NUMBER;
+ ServerFieldType field_number_type = PHONE_HOME_NUMBER;
if (parsed_phone_fields_[FIELD_AREA_CODE] != NULL) {
ok = ok && AddClassification(parsed_phone_fields_[FIELD_AREA_CODE],
PHONE_HOME_CITY_CODE,
diff --git a/components/autofill/core/browser/phone_field.h b/components/autofill/core/browser/phone_field.h
index cb5b732..f163b9c 100644
--- a/components/autofill/core/browser/phone_field.h
+++ b/components/autofill/core/browser/phone_field.h
@@ -29,7 +29,7 @@ class PhoneField : public FormField {
protected:
// FormField:
- virtual bool ClassifyField(FieldTypeMap* map) const OVERRIDE;
+ virtual bool ClassifyField(ServerFieldTypeMap* map) const OVERRIDE;
private:
FRIEND_TEST_ALL_PREFIXES(PhoneFieldTest, ParseOneLinePhone);
diff --git a/components/autofill/core/browser/phone_field_unittest.cc b/components/autofill/core/browser/phone_field_unittest.cc
index 46a5e0d..44c3df6 100644
--- a/components/autofill/core/browser/phone_field_unittest.cc
+++ b/components/autofill/core/browser/phone_field_unittest.cc
@@ -20,7 +20,7 @@ class PhoneFieldTest : public testing::Test {
protected:
ScopedVector<const AutofillField> list_;
scoped_ptr<PhoneField> field_;
- FieldTypeMap field_type_map_;
+ ServerFieldTypeMap field_type_map_;
// Downcast for tests.
static PhoneField* Parse(AutofillScanner* scanner) {
diff --git a/components/autofill/core/browser/phone_number.cc b/components/autofill/core/browser/phone_number.cc
index 9dc1b34..e452f98 100644
--- a/components/autofill/core/browser/phone_number.cc
+++ b/components/autofill/core/browser/phone_number.cc
@@ -65,7 +65,7 @@ PhoneNumber& PhoneNumber::operator=(const PhoneNumber& number) {
return *this;
}
-void PhoneNumber::GetSupportedTypes(FieldTypeSet* supported_types) const {
+void PhoneNumber::GetSupportedTypes(ServerFieldTypeSet* supported_types) const {
supported_types->insert(PHONE_HOME_WHOLE_NUMBER);
supported_types->insert(PHONE_HOME_NUMBER);
supported_types->insert(PHONE_HOME_CITY_CODE);
@@ -73,7 +73,7 @@ void PhoneNumber::GetSupportedTypes(FieldTypeSet* supported_types) const {
supported_types->insert(PHONE_HOME_COUNTRY_CODE);
}
-base::string16 PhoneNumber::GetRawInfo(AutofillFieldType type) const {
+base::string16 PhoneNumber::GetRawInfo(ServerFieldType type) const {
type = AutofillType::GetEquivalentFieldType(type);
if (type == PHONE_HOME_WHOLE_NUMBER)
return number_;
@@ -84,7 +84,7 @@ base::string16 PhoneNumber::GetRawInfo(AutofillFieldType type) const {
return base::string16();
}
-void PhoneNumber::SetRawInfo(AutofillFieldType type,
+void PhoneNumber::SetRawInfo(ServerFieldType type,
const base::string16& value) {
type = AutofillType::GetEquivalentFieldType(type);
if (type != PHONE_HOME_CITY_AND_NUMBER &&
@@ -104,18 +104,20 @@ void PhoneNumber::SetRawInfo(AutofillFieldType type,
// (650)2345678 -> 6502345678
// 1-800-FLOWERS -> 18003569377
// If the phone cannot be normalized, returns the stored value verbatim.
-base::string16 PhoneNumber::GetInfo(AutofillFieldType type,
+base::string16 PhoneNumber::GetInfo(const AutofillType& type,
const std::string& app_locale) const {
- type = AutofillType::GetEquivalentFieldType(type);
+ ServerFieldType server_type =
+ AutofillType::GetEquivalentFieldType(type.server_type());
UpdateCacheIfNeeded(app_locale);
// Queries for whole numbers will return the non-normalized number if
// normalization for the number fails. All other field types require
// normalization.
- if (type != PHONE_HOME_WHOLE_NUMBER && !cached_parsed_phone_.IsValidNumber())
+ if (server_type != PHONE_HOME_WHOLE_NUMBER &&
+ !cached_parsed_phone_.IsValidNumber())
return base::string16();
- switch (type) {
+ switch (server_type) {
case PHONE_HOME_WHOLE_NUMBER:
return cached_parsed_phone_.GetWholeNumber();
@@ -138,11 +140,12 @@ base::string16 PhoneNumber::GetInfo(AutofillFieldType type,
}
}
-bool PhoneNumber::SetInfo(AutofillFieldType type,
+bool PhoneNumber::SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) {
- type = AutofillType::GetEquivalentFieldType(type);
- SetRawInfo(type, value);
+ ServerFieldType server_type =
+ AutofillType::GetEquivalentFieldType(type.server_type());
+ SetRawInfo(server_type, value);
if (number_.empty())
return true;
@@ -155,14 +158,14 @@ bool PhoneNumber::SetInfo(AutofillFieldType type,
void PhoneNumber::GetMatchingTypes(const base::string16& text,
const std::string& app_locale,
- FieldTypeSet* matching_types) const {
+ ServerFieldTypeSet* matching_types) const {
base::string16 stripped_text = text;
StripPunctuation(&stripped_text);
FormGroup::GetMatchingTypes(stripped_text, app_locale, matching_types);
// For US numbers, also compare to the three-digit prefix and the four-digit
// suffix, since web sites often split numbers into these two fields.
- base::string16 number = GetInfo(PHONE_HOME_NUMBER, app_locale);
+ base::string16 number = GetInfo(AutofillType(PHONE_HOME_NUMBER), app_locale);
if (GetRegion(*profile_, app_locale) == "US" &&
number.size() == (kPrefixLength + kSuffixLength)) {
base::string16 prefix = number.substr(kPrefixOffset, kPrefixLength);
@@ -171,7 +174,8 @@ void PhoneNumber::GetMatchingTypes(const base::string16& text,
matching_types->insert(PHONE_HOME_NUMBER);
}
- base::string16 whole_number = GetInfo(PHONE_HOME_WHOLE_NUMBER, app_locale);
+ base::string16 whole_number =
+ GetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER), app_locale);
if (!whole_number.empty()) {
base::string16 normalized_number =
i18n::NormalizePhoneNumber(text, GetRegion(*profile_, app_locale));
@@ -192,30 +196,31 @@ PhoneNumber::PhoneCombineHelper::PhoneCombineHelper() {
PhoneNumber::PhoneCombineHelper::~PhoneCombineHelper() {
}
-bool PhoneNumber::PhoneCombineHelper::SetInfo(AutofillFieldType field_type,
+bool PhoneNumber::PhoneCombineHelper::SetInfo(const AutofillType& field_type,
const base::string16& value) {
- field_type = AutofillType::GetEquivalentFieldType(field_type);
- if (field_type == PHONE_HOME_COUNTRY_CODE) {
+ ServerFieldType server_field_type =
+ AutofillType::GetEquivalentFieldType(field_type.server_type());
+ if (server_field_type == PHONE_HOME_COUNTRY_CODE) {
country_ = value;
return true;
}
- if (field_type == PHONE_HOME_CITY_CODE) {
+ if (server_field_type == PHONE_HOME_CITY_CODE) {
city_ = value;
return true;
}
- if (field_type == PHONE_HOME_CITY_AND_NUMBER) {
+ if (server_field_type == PHONE_HOME_CITY_AND_NUMBER) {
phone_ = value;
return true;
}
- if (field_type == PHONE_HOME_WHOLE_NUMBER) {
+ if (server_field_type == PHONE_HOME_WHOLE_NUMBER) {
whole_number_ = value;
return true;
}
- if (field_type == PHONE_HOME_NUMBER) {
+ if (server_field_type == PHONE_HOME_NUMBER) {
phone_.append(value);
return true;
}
diff --git a/components/autofill/core/browser/phone_number.h b/components/autofill/core/browser/phone_number.h
index 32ed209..19f9f09 100644
--- a/components/autofill/core/browser/phone_number.h
+++ b/components/autofill/core/browser/phone_number.h
@@ -10,7 +10,6 @@
#include "base/gtest_prod_util.h"
#include "base/strings/string16.h"
-#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/form_group.h"
#include "components/autofill/core/browser/phone_number_i18n.h"
@@ -30,15 +29,16 @@ class PhoneNumber : public FormGroup {
void set_profile(AutofillProfile* profile) { profile_ = profile; }
// FormGroup implementation:
- virtual void GetMatchingTypes(const base::string16& text,
- const std::string& app_locale,
- FieldTypeSet* matching_types) const OVERRIDE;
- virtual base::string16 GetRawInfo(AutofillFieldType type) const OVERRIDE;
- virtual void SetRawInfo(AutofillFieldType type,
+ virtual void GetMatchingTypes(
+ const base::string16& text,
+ const std::string& app_locale,
+ ServerFieldTypeSet* matching_types) const OVERRIDE;
+ virtual base::string16 GetRawInfo(ServerFieldType type) const OVERRIDE;
+ virtual void SetRawInfo(ServerFieldType type,
const base::string16& value) OVERRIDE;
- virtual base::string16 GetInfo(AutofillFieldType type,
+ virtual base::string16 GetInfo(const AutofillType& type,
const std::string& app_locale) const OVERRIDE;
- virtual bool SetInfo(AutofillFieldType type,
+ virtual bool SetInfo(const AutofillType& type,
const base::string16& value,
const std::string& app_locale) OVERRIDE;
@@ -56,7 +56,7 @@ class PhoneNumber : public FormGroup {
// If |type| is a phone field type, saves the |value| accordingly and
// returns true. For all other field types returs false.
- bool SetInfo(AutofillFieldType type, const base::string16& value);
+ bool SetInfo(const AutofillType& type, const base::string16& value);
// Parses the number built up from pieces stored via SetInfo() according to
// the specified |profile|'s country code, falling back to the given
@@ -78,7 +78,8 @@ class PhoneNumber : public FormGroup {
private:
// FormGroup:
- virtual void GetSupportedTypes(FieldTypeSet* supported_types) const OVERRIDE;
+ virtual void GetSupportedTypes(
+ ServerFieldTypeSet* supported_types) const OVERRIDE;
// Updates the cached parsed number if the profile's region has changed
// since the last time the cache was updated.
diff --git a/components/autofill/core/browser/phone_number_unittest.cc b/components/autofill/core/browser/phone_number_unittest.cc
index 417fb59..fd654d0 100644
--- a/components/autofill/core/browser/phone_number_unittest.cc
+++ b/components/autofill/core/browser/phone_number_unittest.cc
@@ -5,6 +5,7 @@
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_profile.h"
+#include "components/autofill/core/browser/autofill_type.h"
#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/phone_number.h"
#include "components/autofill/core/browser/phone_number_i18n.h"
@@ -18,9 +19,9 @@ TEST(PhoneNumberTest, Matcher) {
// Set phone number so country_code == 1, city_code = 650, number = 2345678.
base::string16 phone(ASCIIToUTF16("1 [650] 234-5678"));
PhoneNumber phone_number(&profile);
- phone_number.SetInfo(PHONE_HOME_WHOLE_NUMBER, phone, "US");
+ phone_number.SetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER), phone, "US");
- FieldTypeSet matching_types;
+ ServerFieldTypeSet matching_types;
phone_number.GetMatchingTypes(base::string16(), "US", &matching_types);
EXPECT_EQ(1U, matching_types.size());
EXPECT_TRUE(matching_types.find(EMPTY_TYPE) != matching_types.end());
@@ -91,26 +92,26 @@ TEST(PhoneNumberTest, SetInfo) {
EXPECT_EQ(base::string16(), phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER));
// Set the formatted info directly.
- EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER,
+ EXPECT_TRUE(phone.SetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER),
ASCIIToUTF16("(650) 234-5678"), "US"));
EXPECT_EQ(ASCIIToUTF16("(650) 234-5678"),
phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER));
// Unformatted numbers should be formatted.
- EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER,
+ EXPECT_TRUE(phone.SetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER),
ASCIIToUTF16("8887776666"), "US"));
EXPECT_EQ(ASCIIToUTF16("(888) 777-6666"),
phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER));
// Differently formatted numbers should be re-formatted.
- EXPECT_TRUE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER,
+ EXPECT_TRUE(phone.SetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER),
ASCIIToUTF16("800-432-8765"), "US"));
EXPECT_EQ(ASCIIToUTF16("(800) 432-8765"),
phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER));
// Invalid numbers should not be stored. In the US, phone numbers cannot
// start with the digit '1'.
- EXPECT_FALSE(phone.SetInfo(PHONE_HOME_WHOLE_NUMBER,
+ EXPECT_FALSE(phone.SetInfo(AutofillType(PHONE_HOME_WHOLE_NUMBER),
ASCIIToUTF16("650111111"), "US"));
EXPECT_EQ(base::string16(), phone.GetRawInfo(PHONE_HOME_WHOLE_NUMBER));
}
@@ -122,22 +123,26 @@ TEST(PhoneNumberTest, UpdateCachedPhoneNumber) {
PhoneNumber phone(&profile);
phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("6502345678"));
- EXPECT_EQ(ASCIIToUTF16("650"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US"));
+ EXPECT_EQ(ASCIIToUTF16("650"),
+ phone.GetInfo(AutofillType(PHONE_HOME_CITY_CODE), "US"));
// Update the area code.
phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("8322345678"));
- EXPECT_EQ(ASCIIToUTF16("832"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US"));
+ EXPECT_EQ(ASCIIToUTF16("832"),
+ phone.GetInfo(AutofillType(PHONE_HOME_CITY_CODE), "US"));
// Change the phone number to have a UK format, but try to parse with the
// wrong locale.
phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("07023456789"));
- EXPECT_EQ(base::string16(), phone.GetInfo(PHONE_HOME_CITY_CODE, "US"));
+ EXPECT_EQ(base::string16(),
+ phone.GetInfo(AutofillType(PHONE_HOME_CITY_CODE), "US"));
// Now try parsing using the correct locale. Note that the profile's country
// code should override the app locale, which is still set to "US".
profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("GB"));
phone.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, ASCIIToUTF16("07023456789"));
- EXPECT_EQ(ASCIIToUTF16("70"), phone.GetInfo(PHONE_HOME_CITY_CODE, "US"));
+ EXPECT_EQ(ASCIIToUTF16("70"),
+ phone.GetInfo(AutofillType(PHONE_HOME_CITY_CODE), "US"));
}
TEST(PhoneNumberTest, PhoneCombineHelper) {
@@ -145,13 +150,13 @@ TEST(PhoneNumberTest, PhoneCombineHelper) {
profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US"));
PhoneNumber::PhoneCombineHelper number1;
- EXPECT_FALSE(number1.SetInfo(ADDRESS_BILLING_CITY,
+ EXPECT_FALSE(number1.SetInfo(AutofillType(ADDRESS_BILLING_CITY),
ASCIIToUTF16("1")));
- EXPECT_TRUE(number1.SetInfo(PHONE_HOME_COUNTRY_CODE,
+ EXPECT_TRUE(number1.SetInfo(AutofillType(PHONE_HOME_COUNTRY_CODE),
ASCIIToUTF16("1")));
- EXPECT_TRUE(number1.SetInfo(PHONE_HOME_CITY_CODE,
+ EXPECT_TRUE(number1.SetInfo(AutofillType(PHONE_HOME_CITY_CODE),
ASCIIToUTF16("650")));
- EXPECT_TRUE(number1.SetInfo(PHONE_HOME_NUMBER,
+ EXPECT_TRUE(number1.SetInfo(AutofillType(PHONE_HOME_NUMBER),
ASCIIToUTF16("2345678")));
base::string16 parsed_phone;
EXPECT_TRUE(number1.ParseNumber(profile, "en-US", &parsed_phone));
@@ -159,34 +164,34 @@ TEST(PhoneNumberTest, PhoneCombineHelper) {
EXPECT_EQ(ASCIIToUTF16("+1 650-234-5678"), parsed_phone);
PhoneNumber::PhoneCombineHelper number3;
- EXPECT_TRUE(number3.SetInfo(PHONE_HOME_CITY_CODE,
+ EXPECT_TRUE(number3.SetInfo(AutofillType(PHONE_HOME_CITY_CODE),
ASCIIToUTF16("650")));
- EXPECT_TRUE(number3.SetInfo(PHONE_HOME_NUMBER,
+ EXPECT_TRUE(number3.SetInfo(AutofillType(PHONE_HOME_NUMBER),
ASCIIToUTF16("2345680")));
EXPECT_TRUE(number3.ParseNumber(profile, "en-US", &parsed_phone));
// National format as it does not have a country code.
EXPECT_EQ(ASCIIToUTF16("(650) 234-5680"), parsed_phone);
PhoneNumber::PhoneCombineHelper number4;
- EXPECT_TRUE(number4.SetInfo(PHONE_HOME_CITY_CODE,
+ EXPECT_TRUE(number4.SetInfo(AutofillType(PHONE_HOME_CITY_CODE),
ASCIIToUTF16("123"))); // Incorrect city code.
- EXPECT_TRUE(number4.SetInfo(PHONE_HOME_NUMBER,
+ EXPECT_TRUE(number4.SetInfo(AutofillType(PHONE_HOME_NUMBER),
ASCIIToUTF16("2345680")));
EXPECT_FALSE(number4.ParseNumber(profile, "en-US", &parsed_phone));
EXPECT_EQ(base::string16(), parsed_phone);
PhoneNumber::PhoneCombineHelper number5;
- EXPECT_TRUE(number5.SetInfo(PHONE_HOME_CITY_AND_NUMBER,
+ EXPECT_TRUE(number5.SetInfo(AutofillType(PHONE_HOME_CITY_AND_NUMBER),
ASCIIToUTF16("6502345681")));
EXPECT_TRUE(number5.ParseNumber(profile, "en-US", &parsed_phone));
EXPECT_EQ(ASCIIToUTF16("(650) 234-5681"), parsed_phone);
PhoneNumber::PhoneCombineHelper number6;
- EXPECT_TRUE(number6.SetInfo(PHONE_HOME_CITY_CODE,
+ EXPECT_TRUE(number6.SetInfo(AutofillType(PHONE_HOME_CITY_CODE),
ASCIIToUTF16("650")));
- EXPECT_TRUE(number6.SetInfo(PHONE_HOME_NUMBER,
+ EXPECT_TRUE(number6.SetInfo(AutofillType(PHONE_HOME_NUMBER),
ASCIIToUTF16("234")));
- EXPECT_TRUE(number6.SetInfo(PHONE_HOME_NUMBER,
+ EXPECT_TRUE(number6.SetInfo(AutofillType(PHONE_HOME_NUMBER),
ASCIIToUTF16("5682")));
EXPECT_TRUE(number6.ParseNumber(profile, "en-US", &parsed_phone));
EXPECT_EQ(ASCIIToUTF16("(650) 234-5682"), parsed_phone);
@@ -194,11 +199,11 @@ TEST(PhoneNumberTest, PhoneCombineHelper) {
// Ensure parsing is possible when falling back to detecting the country code
// based on the app locale.
PhoneNumber::PhoneCombineHelper number7;
- EXPECT_TRUE(number7.SetInfo(PHONE_HOME_CITY_CODE,
+ EXPECT_TRUE(number7.SetInfo(AutofillType(PHONE_HOME_CITY_CODE),
ASCIIToUTF16("650")));
- EXPECT_TRUE(number7.SetInfo(PHONE_HOME_NUMBER,
+ EXPECT_TRUE(number7.SetInfo(AutofillType(PHONE_HOME_NUMBER),
ASCIIToUTF16("234")));
- EXPECT_TRUE(number7.SetInfo(PHONE_HOME_NUMBER,
+ EXPECT_TRUE(number7.SetInfo(AutofillType(PHONE_HOME_NUMBER),
ASCIIToUTF16("5682")));
EXPECT_TRUE(number7.ParseNumber(AutofillProfile(), "en-US", &parsed_phone));
EXPECT_EQ(ASCIIToUTF16("(650) 234-5682"), parsed_phone);
diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc
index 07955b2..9066d9c 100644
--- a/components/autofill/core/browser/webdata/autofill_table.cc
+++ b/components/autofill/core/browser/webdata/autofill_table.cc
@@ -72,7 +72,7 @@ void BindAutofillProfileToStatement(const AutofillProfile& profile,
s->BindString16(5, LimitDataSize(text));
text = profile.GetRawInfo(ADDRESS_HOME_ZIP);
s->BindString16(6, LimitDataSize(text));
- text = profile.GetInfo(ADDRESS_HOME_COUNTRY, app_locale);
+ text = profile.GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), app_locale);
s->BindString16(7, LimitDataSize(text));
text = profile.GetRawInfo(ADDRESS_HOME_COUNTRY);
s->BindString16(8, LimitDataSize(text));
@@ -1928,7 +1928,8 @@ bool AutofillTable::MigrateToVersion33ProfilesBasedOnFirstName() {
profile.SetRawInfo(ADDRESS_HOME_CITY, s.ColumnString16(8));
profile.SetRawInfo(ADDRESS_HOME_STATE, s.ColumnString16(9));
profile.SetRawInfo(ADDRESS_HOME_ZIP, s.ColumnString16(10));
- profile.SetInfo(ADDRESS_HOME_COUNTRY, s.ColumnString16(11), app_locale_);
+ profile.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), s.ColumnString16(11),
+ app_locale_);
profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, s.ColumnString16(12));
int64 date_modified = s.ColumnInt64(13);
@@ -2151,7 +2152,7 @@ bool AutofillTable::MigrateToVersion37MergeAndCullOlderProfiles() {
s.BindString16(5, LimitDataSize(text));
text = iter->GetRawInfo(ADDRESS_HOME_ZIP);
s.BindString16(6, LimitDataSize(text));
- text = iter->GetInfo(ADDRESS_HOME_COUNTRY, app_locale_);
+ text = iter->GetInfo(AutofillType(ADDRESS_HOME_COUNTRY), app_locale_);
s.BindString16(7, LimitDataSize(text));
text = iter->GetRawInfo(ADDRESS_HOME_COUNTRY);
s.BindString16(8, LimitDataSize(text));
diff --git a/components/webdata/common/web_database_migration_unittest.cc b/components/webdata/common/web_database_migration_unittest.cc
index 927fae6..5e6ef6e 100644
--- a/components/webdata/common/web_database_migration_unittest.cc
+++ b/components/webdata/common/web_database_migration_unittest.cc
@@ -60,7 +60,8 @@ void AutofillProfile31FromStatement(const sql::Statement& s,
profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(10));
profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(11));
profile->SetInfo(
- autofill::ADDRESS_HOME_COUNTRY, s.ColumnString16(12), "en-US");
+ autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY),
+ s.ColumnString16(12), "en-US");
profile->SetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER, s.ColumnString16(13));
*date_modified = s.ColumnInt64(15);
profile->set_guid(s.ColumnString(16));
@@ -81,7 +82,8 @@ void AutofillProfile33FromStatement(const sql::Statement& s,
profile->SetRawInfo(autofill::ADDRESS_HOME_STATE, s.ColumnString16(5));
profile->SetRawInfo(autofill::ADDRESS_HOME_ZIP, s.ColumnString16(6));
profile->SetInfo(
- autofill::ADDRESS_HOME_COUNTRY, s.ColumnString16(7), "en-US");
+ autofill::AutofillType(autofill::ADDRESS_HOME_COUNTRY),
+ s.ColumnString16(7), "en-US");
*date_modified = s.ColumnInt64(8);
}