| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/core/browser/autofill_profile.h" | 5 #include "components/autofill/core/browser/autofill_profile.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 836 new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); | 836 new AutofillProfile(base::GenerateGUID(), "https://www.example.com/")); |
| 837 test::SetProfileInfo(a.get(), "Thomas", NULL, "Jefferson", | 837 test::SetProfileInfo(a.get(), "Thomas", NULL, "Jefferson", |
| 838 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 838 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| 839 NULL); | 839 NULL); |
| 840 test::SetProfileInfo(a.get(), "Thomas", NULL, "Adams", | 840 test::SetProfileInfo(a.get(), "Thomas", NULL, "Adams", |
| 841 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, | 841 "declaration_guy@gmail.com", NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| 842 NULL); | 842 NULL); |
| 843 EXPECT_FALSE(a->IsSubsetOf(*b, "en-US")); | 843 EXPECT_FALSE(a->IsSubsetOf(*b, "en-US")); |
| 844 } | 844 } |
| 845 | 845 |
| 846 TEST(AutofillProfileTest, OverwriteWith_DifferentProfile) { | 846 TEST(AutofillProfileTest, MergeDataFrom_DifferentProfile) { |
| 847 AutofillProfile a; | 847 AutofillProfile a; |
| 848 SetupTestProfile(a); | 848 SetupTestProfile(a); |
| 849 | 849 |
| 850 // Create an identical profile except that the new profile: | 850 // Create an identical profile except that the new profile: |
| 851 // (1) Has a different origin, | 851 // (1) Has a different origin, |
| 852 // (2) Has a different address line 2, | 852 // (2) Has a different address line 2, |
| 853 // (3) Lacks a company name, | 853 // (3) Lacks a company name, |
| 854 // (4) Has a different full name, and | 854 // (4) Has a different full name, and |
| 855 // (5) Has a language code. | 855 // (5) Has a language code. |
| 856 AutofillProfile b = a; | 856 AutofillProfile b = a; |
| 857 b.set_guid(base::GenerateGUID()); | 857 b.set_guid(base::GenerateGUID()); |
| 858 b.set_origin(kSettingsOrigin); | 858 b.set_origin(kSettingsOrigin); |
| 859 b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("area 51")); | 859 b.SetRawInfo(ADDRESS_HOME_LINE2, ASCIIToUTF16("Unit 5, area 51")); |
| 860 b.SetRawInfo(COMPANY_NAME, base::string16()); | 860 b.SetRawInfo(COMPANY_NAME, base::string16()); |
| 861 | 861 |
| 862 b.SetRawInfo(NAME_MIDDLE, ASCIIToUTF16("M.")); |
| 862 b.SetRawInfo(NAME_FULL, ASCIIToUTF16("Marion M. Morrison")); | 863 b.SetRawInfo(NAME_FULL, ASCIIToUTF16("Marion M. Morrison")); |
| 863 b.set_language_code("en"); | 864 b.set_language_code("en"); |
| 864 | 865 |
| 865 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); | 866 EXPECT_TRUE(a.MergeDataFrom(b, "en-US")); |
| 866 EXPECT_EQ(kSettingsOrigin, a.origin()); | 867 EXPECT_EQ(kSettingsOrigin, a.origin()); |
| 867 EXPECT_EQ(ASCIIToUTF16("area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2)); | 868 EXPECT_EQ(ASCIIToUTF16("Unit 5, area 51"), a.GetRawInfo(ADDRESS_HOME_LINE2)); |
| 868 EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME)); | 869 EXPECT_EQ(ASCIIToUTF16("Fox"), a.GetRawInfo(COMPANY_NAME)); |
| 869 base::string16 name = a.GetInfo(AutofillType(NAME_FULL), "en-US"); | 870 base::string16 name = a.GetInfo(AutofillType(NAME_FULL), "en-US"); |
| 870 EXPECT_EQ(ASCIIToUTF16("Marion M. Morrison"), name); | 871 EXPECT_EQ(ASCIIToUTF16("Marion Mitchell Morrison"), name); |
| 871 EXPECT_EQ("en", a.language_code()); | 872 EXPECT_EQ("en", a.language_code()); |
| 872 } | 873 } |
| 873 | 874 |
| 874 TEST(AutofillProfileTest, OverwriteWith_SameProfile) { | 875 TEST(AutofillProfileTest, MergeDataFrom_SameProfile) { |
| 875 AutofillProfile a; | 876 AutofillProfile a; |
| 876 SetupTestProfile(a); | 877 SetupTestProfile(a); |
| 877 | 878 |
| 879 // The profile has no full name yet. Merge will add it. |
| 878 AutofillProfile b = a; | 880 AutofillProfile b = a; |
| 879 b.set_guid(base::GenerateGUID()); | 881 b.set_guid(base::GenerateGUID()); |
| 880 EXPECT_FALSE(a.OverwriteWith(b, "en-US")); | 882 EXPECT_TRUE(a.MergeDataFrom(b, "en-US")); |
| 881 } | 883 EXPECT_EQ(2u, a.use_count()); |
| 882 | 884 |
| 883 TEST(AutofillProfileTest, OverwriteWith_DifferentName) { | 885 // Now the profile is fully populated. Merging it again has no effect (except |
| 884 AutofillProfile a; | 886 // for usage statistics). |
| 885 SetupTestProfile(a); | 887 AutofillProfile c = a; |
| 886 | 888 c.set_guid(base::GenerateGUID()); |
| 887 AutofillProfile b = a; | 889 c.set_use_count(3); |
| 888 b.SetRawInfo(NAME_FIRST, ASCIIToUTF16("Mario")); | 890 EXPECT_FALSE(a.MergeDataFrom(c, "en-US")); |
| 889 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); | 891 EXPECT_EQ(5u, a.use_count()); |
| 890 base::string16 name_full = a.GetInfo(AutofillType(NAME_FULL), "en-US"); | |
| 891 EXPECT_EQ(ASCIIToUTF16("Mario Mitchell Morrison"), name_full); | |
| 892 } | |
| 893 | |
| 894 TEST(AutofillProfileTest, OverwriteWith_DifferentAddress) { | |
| 895 AutofillProfile a; | |
| 896 SetupTestProfile(a); | |
| 897 | |
| 898 AutofillProfile b = a; | |
| 899 b.SetRawInfo(ADDRESS_HOME_LINE1, ASCIIToUTF16("123 Aquarium St.")); | |
| 900 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); | |
| 901 base::string16 address = a.GetRawInfo(ADDRESS_HOME_LINE1); | |
| 902 EXPECT_EQ(ASCIIToUTF16("123 Aquarium St."), address); | |
| 903 } | 892 } |
| 904 | 893 |
| 905 TEST(AutofillProfileTest, OverwriteName_AddNameFull) { | 894 TEST(AutofillProfileTest, OverwriteName_AddNameFull) { |
| 906 AutofillProfile a; | 895 AutofillProfile a; |
| 907 | 896 |
| 908 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); | 897 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); |
| 909 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); | 898 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); |
| 910 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); | 899 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); |
| 911 | 900 |
| 912 AutofillProfile b = a; | 901 AutofillProfile b = a; |
| 913 b.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("Marion Mitchell Morrison")); | 902 b.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("Marion Mitchell Morrison")); |
| 914 | 903 |
| 915 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); | 904 EXPECT_TRUE(a.MergeDataFrom(b, "en-US")); |
| 916 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); | 905 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); |
| 917 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); | 906 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); |
| 918 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); | 907 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); |
| 919 EXPECT_EQ(base::ASCIIToUTF16("Marion Mitchell Morrison"), | 908 EXPECT_EQ(base::ASCIIToUTF16("Marion Mitchell Morrison"), |
| 920 a.GetRawInfo(NAME_FULL)); | 909 a.GetRawInfo(NAME_FULL)); |
| 921 } | 910 } |
| 922 | 911 |
| 923 // Tests that OverwriteName overwrites the name parts if they have different | 912 // Tests that OverwriteName overwrites the name parts if they have different |
| 924 // case. | 913 // case. |
| 925 TEST(AutofillProfileTest, OverwriteName_DifferentCase) { | 914 TEST(AutofillProfileTest, OverwriteName_DifferentCase) { |
| 926 AutofillProfile a; | 915 AutofillProfile a; |
| 927 | 916 |
| 928 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("marion")); | 917 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("marion")); |
| 929 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("mitchell")); | 918 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("mitchell")); |
| 930 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("morrison")); | 919 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("morrison")); |
| 931 | 920 |
| 932 AutofillProfile b = a; | 921 AutofillProfile b = a; |
| 933 b.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); | 922 b.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); |
| 934 b.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); | 923 b.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); |
| 935 b.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); | 924 b.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); |
| 936 | 925 |
| 937 EXPECT_TRUE(a.OverwriteWith(b, "en-US")); | 926 EXPECT_TRUE(a.MergeDataFrom(b, "en-US")); |
| 938 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); | 927 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); |
| 939 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); | 928 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); |
| 940 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); | 929 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); |
| 941 } | 930 } |
| 942 | 931 |
| 943 TEST(AutofillProfileTest, AssignmentOperator) { | 932 TEST(AutofillProfileTest, AssignmentOperator) { |
| 944 AutofillProfile a(base::GenerateGUID(), "https://www.example.com/"); | 933 AutofillProfile a(base::GenerateGUID(), "https://www.example.com/"); |
| 945 test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", | 934 test::SetProfileInfo(&a, "Marion", "Mitchell", "Morrison", |
| 946 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", | 935 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", |
| 947 "Hollywood", "CA", "91601", "US", | 936 "Hollywood", "CA", "91601", "US", |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1127 profile.SetInfo(AutofillType(ADDRESS_HOME_STATE), | 1116 profile.SetInfo(AutofillType(ADDRESS_HOME_STATE), |
| 1128 ASCIIToUTF16("CA"), | 1117 ASCIIToUTF16("CA"), |
| 1129 "en-US"); | 1118 "en-US"); |
| 1130 EXPECT_FALSE(profile.GetInfo(full_address, "en-US").empty()); | 1119 EXPECT_FALSE(profile.GetInfo(full_address, "en-US").empty()); |
| 1131 profile.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), | 1120 profile.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), |
| 1132 base::string16(), | 1121 base::string16(), |
| 1133 "en-US"); | 1122 "en-US"); |
| 1134 EXPECT_TRUE(profile.GetInfo(full_address, "en-US").empty()); | 1123 EXPECT_TRUE(profile.GetInfo(full_address, "en-US").empty()); |
| 1135 } | 1124 } |
| 1136 | 1125 |
| 1137 TEST(AutofillProfileTest, CanonicalizeProfileString) { | |
| 1138 // NOP. | |
| 1139 EXPECT_EQ(base::string16(), | |
| 1140 AutofillProfile::CanonicalizeProfileString(base::string16())); | |
| 1141 | |
| 1142 // Simple punctuation removed. | |
| 1143 EXPECT_EQ(ASCIIToUTF16("1600 amphitheatre pkwy"), | |
| 1144 AutofillProfile::CanonicalizeProfileString(ASCIIToUTF16( | |
| 1145 "1600 Amphitheatre, Pkwy."))); | |
| 1146 | |
| 1147 // Unicode punctuation (hyphen and space), multiple spaces collapsed. | |
| 1148 EXPECT_EQ(ASCIIToUTF16("mid island plaza"), | |
| 1149 AutofillProfile::CanonicalizeProfileString(base::WideToUTF16( | |
| 1150 L"Mid\x2013Island\x2003 Plaza"))); | |
| 1151 | |
| 1152 // Newline character removed. | |
| 1153 EXPECT_EQ(ASCIIToUTF16("1600 amphitheatre pkwy app 2"), | |
| 1154 AutofillProfile::CanonicalizeProfileString( | |
| 1155 ASCIIToUTF16("1600 amphitheatre pkwy \n App. 2"))); | |
| 1156 | |
| 1157 // Diacritics removed. | |
| 1158 EXPECT_EQ(UTF8ToUTF16("まeoa정"), | |
| 1159 AutofillProfile::CanonicalizeProfileString(UTF8ToUTF16("まéÖä정"))); | |
| 1160 } | |
| 1161 | |
| 1162 TEST(AutofillProfileTest, SaveAdditionalInfo_Name_AddingNameFull) { | 1126 TEST(AutofillProfileTest, SaveAdditionalInfo_Name_AddingNameFull) { |
| 1163 AutofillProfile a; | 1127 AutofillProfile a; |
| 1164 | 1128 |
| 1165 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); | 1129 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); |
| 1166 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); | 1130 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); |
| 1167 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); | 1131 a.SetRawInfo(NAME_LAST, base::ASCIIToUTF16("Morrison")); |
| 1168 | 1132 |
| 1169 AutofillProfile b = a; | 1133 AutofillProfile b = a; |
| 1170 b.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("Marion Mitchell Morrison")); | 1134 b.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("Marion Mitchell Morrison")); |
| 1171 | 1135 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1215 b.SetRawInfo(NAME_LAST,UTF8ToUTF16("Morrison")); | 1179 b.SetRawInfo(NAME_LAST,UTF8ToUTF16("Morrison")); |
| 1216 b.SetRawInfo(NAME_FULL, UTF8ToUTF16("")); | 1180 b.SetRawInfo(NAME_FULL, UTF8ToUTF16("")); |
| 1217 | 1181 |
| 1218 EXPECT_TRUE(a.SaveAdditionalInfo(b, "en-US")); | 1182 EXPECT_TRUE(a.SaveAdditionalInfo(b, "en-US")); |
| 1219 | 1183 |
| 1220 // The first, middle and last names should have their first letter in | 1184 // The first, middle and last names should have their first letter in |
| 1221 // uppercase and have acquired diacritics. | 1185 // uppercase and have acquired diacritics. |
| 1222 EXPECT_EQ(UTF8ToUTF16("Märion"), a.GetRawInfo(NAME_FIRST)); | 1186 EXPECT_EQ(UTF8ToUTF16("Märion"), a.GetRawInfo(NAME_FIRST)); |
| 1223 EXPECT_EQ(UTF8ToUTF16("Mitchéll"), a.GetRawInfo(NAME_MIDDLE)); | 1187 EXPECT_EQ(UTF8ToUTF16("Mitchéll"), a.GetRawInfo(NAME_MIDDLE)); |
| 1224 EXPECT_EQ(UTF8ToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); | 1188 EXPECT_EQ(UTF8ToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); |
| 1225 EXPECT_EQ(UTF8ToUTF16("marion mitchell morrison"), | 1189 EXPECT_EQ(UTF8ToUTF16("Märion Mitchéll Morrison"), |
| 1226 a.GetRawInfo(NAME_FULL)); | 1190 a.GetRawInfo(NAME_FULL)); |
| 1227 } | 1191 } |
| 1228 | 1192 |
| 1229 // Tests that no loss of information happens when SavingAdditionalInfo with a | 1193 // Tests that no loss of information happens when SavingAdditionalInfo with a |
| 1230 // profile with an empty name part. | 1194 // profile with an empty name part. |
| 1231 TEST(AutofillProfileTest, SaveAdditionalInfo_Name_LossOfInformation) { | 1195 TEST(AutofillProfileTest, SaveAdditionalInfo_Name_LossOfInformation) { |
| 1232 AutofillProfile a; | 1196 AutofillProfile a; |
| 1233 | 1197 |
| 1234 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); | 1198 a.SetRawInfo(NAME_FIRST, base::ASCIIToUTF16("Marion")); |
| 1235 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); | 1199 a.SetRawInfo(NAME_MIDDLE, base::ASCIIToUTF16("Mitchell")); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1261 | 1225 |
| 1262 // The first, middle and last names should be kept and name full should be | 1226 // The first, middle and last names should be kept and name full should be |
| 1263 // added. | 1227 // added. |
| 1264 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); | 1228 EXPECT_EQ(base::ASCIIToUTF16("Marion"), a.GetRawInfo(NAME_FIRST)); |
| 1265 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); | 1229 EXPECT_EQ(base::ASCIIToUTF16("Mitchell"), a.GetRawInfo(NAME_MIDDLE)); |
| 1266 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); | 1230 EXPECT_EQ(base::ASCIIToUTF16("Morrison"), a.GetRawInfo(NAME_LAST)); |
| 1267 EXPECT_EQ(base::ASCIIToUTF16("Marion Mitchell Morrison"), | 1231 EXPECT_EQ(base::ASCIIToUTF16("Marion Mitchell Morrison"), |
| 1268 a.GetRawInfo(NAME_FULL)); | 1232 a.GetRawInfo(NAME_FULL)); |
| 1269 } | 1233 } |
| 1270 | 1234 |
| 1271 // Tests that PrimaryValues of two similar profiles with different | |
| 1272 // punctuation and case are equal. | |
| 1273 TEST(AutofillProfileTest, PrimaryValue_SimilarProfiles) { | |
| 1274 AutofillProfile profile1(base::GenerateGUID(), "https://www.example.com/"); | |
| 1275 test::SetProfileInfo(&profile1, "Marion", "Mitchell", "Morrison", | |
| 1276 "marion@me.xyz", "Fox", "123 Zoo St.", "unit 5", | |
| 1277 "Hollywood", "CA", "91601", "US", "12345678910"); | |
| 1278 | |
| 1279 AutofillProfile profile2(base::GenerateGUID(), "https://www.example.com/"); | |
| 1280 test::SetProfileInfo(&profile2, "marion", "mitchell", "morrison", | |
| 1281 "marion@me.xyz", "Fox", "123, Zoo St", "unit 5", | |
| 1282 "hollywood", "CA", "91601", "US", "12345678910"); | |
| 1283 | |
| 1284 EXPECT_EQ(profile1.PrimaryValue("en-US"), profile2.PrimaryValue("en-US")); | |
| 1285 } | |
| 1286 | |
| 1287 } // namespace autofill | 1235 } // namespace autofill |
| OLD | NEW |