| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/location.h" | 5 #include "base/location.h" |
| 6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/webdata/autofill_profile_syncable_service.h" | 8 #include "chrome/browser/webdata/autofill_profile_syncable_service.h" |
| 9 #include "components/autofill/core/browser/autofill_profile.h" | 9 #include "components/autofill/core/browser/autofill_profile.h" |
| 10 #include "components/autofill/core/browser/webdata/autofill_change.h" | 10 #include "components/autofill/core/browser/webdata/autofill_change.h" |
| 11 #include "content/public/test/test_browser_thread.h" | 11 #include "content/public/test/test_browser_thread.h" |
| 12 #include "sync/api/sync_error_factory.h" | 12 #include "sync/api/sync_error_factory.h" |
| 13 #include "sync/api/sync_error_factory_mock.h" | 13 #include "sync/api/sync_error_factory_mock.h" |
| 14 #include "sync/protocol/sync.pb.h" | 14 #include "sync/protocol/sync.pb.h" |
| 15 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 17 |
| 18 namespace autofill { |
| 19 |
| 18 using ::testing::_; | 20 using ::testing::_; |
| 19 using ::testing::DoAll; | 21 using ::testing::DoAll; |
| 20 using ::testing::Eq; | 22 using ::testing::Eq; |
| 21 using ::testing::Return; | 23 using ::testing::Return; |
| 22 using ::testing::Property; | 24 using ::testing::Property; |
| 23 using autofill::AutofillProfile; | |
| 24 using autofill::AutofillProfileChange; | |
| 25 using base::UTF8ToUTF16; | 25 using base::UTF8ToUTF16; |
| 26 using content::BrowserThread; | 26 using content::BrowserThread; |
| 27 | 27 |
| 28 // Some guids for testing. | 28 // Some guids for testing. |
| 29 const char kGuid1[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44B"; | 29 const char kGuid1[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44B"; |
| 30 const char kGuid2[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44C"; | 30 const char kGuid2[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44C"; |
| 31 const char kGuid3[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44D"; | 31 const char kGuid3[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44D"; |
| 32 const char kGuid4[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44E"; | 32 const char kGuid4[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44E"; |
| 33 const char kHttpOrigin[] = "http://www.example.com/"; | 33 const char kHttpOrigin[] = "http://www.example.com/"; |
| 34 const char kHttpsOrigin[] = "https://www.example.com/"; | 34 const char kHttpsOrigin[] = "https://www.example.com/"; |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 std::string guid_present2 = kGuid2; | 180 std::string guid_present2 = kGuid2; |
| 181 std::string guid_synced1 = kGuid3; | 181 std::string guid_synced1 = kGuid3; |
| 182 std::string guid_synced2 = kGuid4; | 182 std::string guid_synced2 = kGuid4; |
| 183 std::string origin_present1 = kHttpOrigin; | 183 std::string origin_present1 = kHttpOrigin; |
| 184 std::string origin_present2 = std::string(); | 184 std::string origin_present2 = std::string(); |
| 185 std::string origin_synced1 = kHttpsOrigin; | 185 std::string origin_synced1 = kHttpsOrigin; |
| 186 std::string origin_synced2 = kSettingsOrigin; | 186 std::string origin_synced2 = kSettingsOrigin; |
| 187 | 187 |
| 188 profiles_from_web_db.push_back( | 188 profiles_from_web_db.push_back( |
| 189 new AutofillProfile(guid_present1, origin_present1)); | 189 new AutofillProfile(guid_present1, origin_present1)); |
| 190 profiles_from_web_db.back()->SetRawInfo( | 190 profiles_from_web_db.back()->SetRawInfo(NAME_FIRST, UTF8ToUTF16("John")); |
| 191 autofill::NAME_FIRST, UTF8ToUTF16("John")); | 191 profiles_from_web_db.back()->SetRawInfo(ADDRESS_HOME_LINE1, |
| 192 profiles_from_web_db.back()->SetRawInfo( | 192 UTF8ToUTF16("1 1st st")); |
| 193 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); | |
| 194 profiles_from_web_db.push_back( | 193 profiles_from_web_db.push_back( |
| 195 new AutofillProfile(guid_present2, origin_present2)); | 194 new AutofillProfile(guid_present2, origin_present2)); |
| 196 profiles_from_web_db.back()->SetRawInfo( | 195 profiles_from_web_db.back()->SetRawInfo(NAME_FIRST, UTF8ToUTF16("Tom")); |
| 197 autofill::NAME_FIRST, UTF8ToUTF16("Tom")); | 196 profiles_from_web_db.back()->SetRawInfo(ADDRESS_HOME_LINE1, |
| 198 profiles_from_web_db.back()->SetRawInfo( | 197 UTF8ToUTF16("2 2nd st")); |
| 199 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("2 2nd st")); | |
| 200 | 198 |
| 201 syncer::SyncDataList data_list; | 199 syncer::SyncDataList data_list; |
| 202 AutofillProfile profile1(guid_synced1, origin_synced1); | 200 AutofillProfile profile1(guid_synced1, origin_synced1); |
| 203 profile1.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("Jane")); | 201 profile1.SetRawInfo(NAME_FIRST, UTF8ToUTF16("Jane")); |
| 204 data_list.push_back(autofill_syncable_service_.CreateData(profile1)); | 202 data_list.push_back(autofill_syncable_service_.CreateData(profile1)); |
| 205 AutofillProfile profile2(guid_synced2, origin_synced2); | 203 AutofillProfile profile2(guid_synced2, origin_synced2); |
| 206 profile2.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("Harry")); | 204 profile2.SetRawInfo(NAME_FIRST, UTF8ToUTF16("Harry")); |
| 207 data_list.push_back(autofill_syncable_service_.CreateData(profile2)); | 205 data_list.push_back(autofill_syncable_service_.CreateData(profile2)); |
| 208 // This one will have the name and origin updated. | 206 // This one will have the name and origin updated. |
| 209 AutofillProfile profile3(guid_present2, origin_synced2); | 207 AutofillProfile profile3(guid_present2, origin_synced2); |
| 210 profile3.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("Tom Doe")); | 208 profile3.SetRawInfo(NAME_FIRST, UTF8ToUTF16("Tom Doe")); |
| 211 data_list.push_back(autofill_syncable_service_.CreateData(profile3)); | 209 data_list.push_back(autofill_syncable_service_.CreateData(profile3)); |
| 212 | 210 |
| 213 syncer::SyncChangeList expected_change_list; | 211 syncer::SyncChangeList expected_change_list; |
| 214 expected_change_list.push_back( | 212 expected_change_list.push_back( |
| 215 syncer::SyncChange(FROM_HERE, | 213 syncer::SyncChange(FROM_HERE, |
| 216 syncer::SyncChange::ACTION_ADD, | 214 syncer::SyncChange::ACTION_ADD, |
| 217 MockAutofillProfileSyncableService::CreateData( | 215 MockAutofillProfileSyncableService::CreateData( |
| 218 *profiles_from_web_db.front()))); | 216 *profiles_from_web_db.front()))); |
| 219 | 217 |
| 220 MockAutofillProfileSyncableService::DataBundle expected_bundle; | 218 MockAutofillProfileSyncableService::DataBundle expected_bundle; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 233 std::string guid_present2 = kGuid2; | 231 std::string guid_present2 = kGuid2; |
| 234 std::string guid_synced1 = kGuid3; | 232 std::string guid_synced1 = kGuid3; |
| 235 std::string guid_synced2 = kGuid4; | 233 std::string guid_synced2 = kGuid4; |
| 236 std::string origin_present1 = kHttpOrigin; | 234 std::string origin_present1 = kHttpOrigin; |
| 237 std::string origin_present2 = kSettingsOrigin; | 235 std::string origin_present2 = kSettingsOrigin; |
| 238 std::string origin_synced1 = kHttpsOrigin; | 236 std::string origin_synced1 = kHttpsOrigin; |
| 239 std::string origin_synced2 = kHttpsOrigin; | 237 std::string origin_synced2 = kHttpsOrigin; |
| 240 | 238 |
| 241 profiles_from_web_db.push_back( | 239 profiles_from_web_db.push_back( |
| 242 new AutofillProfile(guid_present1, origin_present1)); | 240 new AutofillProfile(guid_present1, origin_present1)); |
| 243 profiles_from_web_db.back()->SetRawInfo( | 241 profiles_from_web_db.back()->SetRawInfo(NAME_FIRST, UTF8ToUTF16("John")); |
| 244 autofill::NAME_FIRST, UTF8ToUTF16("John")); | 242 profiles_from_web_db.back()->SetRawInfo(ADDRESS_HOME_LINE1, |
| 245 profiles_from_web_db.back()->SetRawInfo( | 243 UTF8ToUTF16("1 1st st")); |
| 246 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); | |
| 247 profiles_from_web_db.push_back( | 244 profiles_from_web_db.push_back( |
| 248 new AutofillProfile(guid_present2, origin_present2)); | 245 new AutofillProfile(guid_present2, origin_present2)); |
| 249 profiles_from_web_db.back()->SetRawInfo( | 246 profiles_from_web_db.back()->SetRawInfo(NAME_FIRST, UTF8ToUTF16("Tom")); |
| 250 autofill::NAME_FIRST, UTF8ToUTF16("Tom")); | 247 profiles_from_web_db.back()->SetRawInfo(ADDRESS_HOME_LINE1, |
| 251 profiles_from_web_db.back()->SetRawInfo( | 248 UTF8ToUTF16("2 2nd st")); |
| 252 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("2 2nd st")); | |
| 253 | 249 |
| 254 // The synced profiles are identical to the local ones, except that the guids | 250 // The synced profiles are identical to the local ones, except that the guids |
| 255 // are different. | 251 // are different. |
| 256 syncer::SyncDataList data_list; | 252 syncer::SyncDataList data_list; |
| 257 AutofillProfile profile1(guid_synced1, origin_synced1); | 253 AutofillProfile profile1(guid_synced1, origin_synced1); |
| 258 profile1.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("John")); | 254 profile1.SetRawInfo(NAME_FIRST, UTF8ToUTF16("John")); |
| 259 profile1.SetRawInfo(autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); | 255 profile1.SetRawInfo(ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); |
| 260 data_list.push_back(autofill_syncable_service_.CreateData(profile1)); | 256 data_list.push_back(autofill_syncable_service_.CreateData(profile1)); |
| 261 AutofillProfile profile2(guid_synced2, origin_synced2); | 257 AutofillProfile profile2(guid_synced2, origin_synced2); |
| 262 profile2.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("Tom")); | 258 profile2.SetRawInfo(NAME_FIRST, UTF8ToUTF16("Tom")); |
| 263 profile2.SetRawInfo(autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("2 2nd st")); | 259 profile2.SetRawInfo(ADDRESS_HOME_LINE1, UTF8ToUTF16("2 2nd st")); |
| 264 data_list.push_back(autofill_syncable_service_.CreateData(profile2)); | 260 data_list.push_back(autofill_syncable_service_.CreateData(profile2)); |
| 265 | 261 |
| 266 AutofillProfile expected_profile(profile2); | 262 AutofillProfile expected_profile(profile2); |
| 267 expected_profile.set_origin(kSettingsOrigin); | 263 expected_profile.set_origin(kSettingsOrigin); |
| 268 syncer::SyncChangeList expected_change_list; | 264 syncer::SyncChangeList expected_change_list; |
| 269 expected_change_list.push_back( | 265 expected_change_list.push_back( |
| 270 syncer::SyncChange(FROM_HERE, | 266 syncer::SyncChange(FROM_HERE, |
| 271 syncer::SyncChange::ACTION_UPDATE, | 267 syncer::SyncChange::ACTION_UPDATE, |
| 272 MockAutofillProfileSyncableService::CreateData( | 268 MockAutofillProfileSyncableService::CreateData( |
| 273 expected_profile))); | 269 expected_profile))); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 289 std::string guid_present2 = kGuid2; | 285 std::string guid_present2 = kGuid2; |
| 290 std::string guid_synced1 = kGuid3; | 286 std::string guid_synced1 = kGuid3; |
| 291 std::string guid_synced2 = kGuid4; | 287 std::string guid_synced2 = kGuid4; |
| 292 std::string origin_present1 = kHttpOrigin; | 288 std::string origin_present1 = kHttpOrigin; |
| 293 std::string origin_present2 = kSettingsOrigin; | 289 std::string origin_present2 = kSettingsOrigin; |
| 294 std::string origin_synced1 = kHttpsOrigin; | 290 std::string origin_synced1 = kHttpsOrigin; |
| 295 std::string origin_synced2 = kHttpsOrigin; | 291 std::string origin_synced2 = kHttpsOrigin; |
| 296 | 292 |
| 297 profiles_from_web_db.push_back( | 293 profiles_from_web_db.push_back( |
| 298 new AutofillProfile(guid_present1, origin_present1)); | 294 new AutofillProfile(guid_present1, origin_present1)); |
| 299 profiles_from_web_db.back()->SetRawInfo( | 295 profiles_from_web_db.back()->SetRawInfo(NAME_FIRST, UTF8ToUTF16("John")); |
| 300 autofill::NAME_FIRST, UTF8ToUTF16("John")); | 296 profiles_from_web_db.back()->SetRawInfo(ADDRESS_HOME_LINE1, |
| 301 profiles_from_web_db.back()->SetRawInfo( | 297 UTF8ToUTF16("1 1st st")); |
| 302 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); | |
| 303 profiles_from_web_db.push_back( | 298 profiles_from_web_db.push_back( |
| 304 new AutofillProfile(guid_present2, origin_present2)); | 299 new AutofillProfile(guid_present2, origin_present2)); |
| 305 profiles_from_web_db.back()->SetRawInfo( | 300 profiles_from_web_db.back()->SetRawInfo(NAME_FIRST, UTF8ToUTF16("Tom")); |
| 306 autofill::NAME_FIRST, UTF8ToUTF16("Tom")); | 301 profiles_from_web_db.back()->SetRawInfo(ADDRESS_HOME_LINE1, |
| 307 profiles_from_web_db.back()->SetRawInfo( | 302 UTF8ToUTF16("2 2nd st")); |
| 308 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("2 2nd st")); | |
| 309 | 303 |
| 310 // The synced profiles are identical to the local ones, except that the guids | 304 // The synced profiles are identical to the local ones, except that the guids |
| 311 // are different. | 305 // are different. |
| 312 syncer::SyncDataList data_list; | 306 syncer::SyncDataList data_list; |
| 313 AutofillProfile profile1(guid_synced1, origin_synced1); | 307 AutofillProfile profile1(guid_synced1, origin_synced1); |
| 314 profile1.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("John")); | 308 profile1.SetRawInfo(NAME_FIRST, UTF8ToUTF16("John")); |
| 315 profile1.SetRawInfo(autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); | 309 profile1.SetRawInfo(ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); |
| 316 profile1.SetRawInfo(autofill::COMPANY_NAME, UTF8ToUTF16("Frobbers, Inc.")); | 310 profile1.SetRawInfo(COMPANY_NAME, UTF8ToUTF16("Frobbers, Inc.")); |
| 317 data_list.push_back(autofill_syncable_service_.CreateData(profile1)); | 311 data_list.push_back(autofill_syncable_service_.CreateData(profile1)); |
| 318 AutofillProfile profile2(guid_synced2, origin_synced2); | 312 AutofillProfile profile2(guid_synced2, origin_synced2); |
| 319 profile2.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("Tom")); | 313 profile2.SetRawInfo(NAME_FIRST, UTF8ToUTF16("Tom")); |
| 320 profile2.SetRawInfo(autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("2 2nd st")); | 314 profile2.SetRawInfo(ADDRESS_HOME_LINE1, UTF8ToUTF16("2 2nd st")); |
| 321 profile2.SetRawInfo(autofill::COMPANY_NAME, UTF8ToUTF16("Fizzbang, LLC.")); | 315 profile2.SetRawInfo(COMPANY_NAME, UTF8ToUTF16("Fizzbang, LLC.")); |
| 322 data_list.push_back(autofill_syncable_service_.CreateData(profile2)); | 316 data_list.push_back(autofill_syncable_service_.CreateData(profile2)); |
| 323 | 317 |
| 324 // The first profile should have its origin updated. | 318 // The first profile should have its origin updated. |
| 325 // The second profile should remain as-is, because an unverified profile | 319 // The second profile should remain as-is, because an unverified profile |
| 326 // should never overwrite a verified one. | 320 // should never overwrite a verified one. |
| 327 AutofillProfile expected_profile(profile1); | 321 AutofillProfile expected_profile(profile1); |
| 328 expected_profile.set_origin(origin_present1); | 322 expected_profile.set_origin(origin_present1); |
| 329 syncer::SyncChangeList expected_change_list; | 323 syncer::SyncChangeList expected_change_list; |
| 330 expected_change_list.push_back( | 324 expected_change_list.push_back( |
| 331 syncer::SyncChange(FROM_HERE, | 325 syncer::SyncChange(FROM_HERE, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 349 } | 343 } |
| 350 | 344 |
| 351 // Ensure that no Sync events are generated to fill in missing origins from Sync | 345 // Ensure that no Sync events are generated to fill in missing origins from Sync |
| 352 // with explicitly present empty ones. This ensures that the migration to add | 346 // with explicitly present empty ones. This ensures that the migration to add |
| 353 // origins to profiles does not generate lots of needless Sync updates. | 347 // origins to profiles does not generate lots of needless Sync updates. |
| 354 TEST_F(AutofillProfileSyncableServiceTest, MergeDataEmptyOrigins) { | 348 TEST_F(AutofillProfileSyncableServiceTest, MergeDataEmptyOrigins) { |
| 355 std::vector<AutofillProfile*> profiles_from_web_db; | 349 std::vector<AutofillProfile*> profiles_from_web_db; |
| 356 | 350 |
| 357 // Create a profile with an empty origin. | 351 // Create a profile with an empty origin. |
| 358 AutofillProfile profile(kGuid1, std::string()); | 352 AutofillProfile profile(kGuid1, std::string()); |
| 359 profile.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("John")); | 353 profile.SetRawInfo(NAME_FIRST, UTF8ToUTF16("John")); |
| 360 profile.SetRawInfo(autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); | 354 profile.SetRawInfo(ADDRESS_HOME_LINE1, UTF8ToUTF16("1 1st st")); |
| 361 | 355 |
| 362 profiles_from_web_db.push_back(new AutofillProfile(profile)); | 356 profiles_from_web_db.push_back(new AutofillProfile(profile)); |
| 363 | 357 |
| 364 // Create a Sync profile identical to |profile|, except with no origin set. | 358 // Create a Sync profile identical to |profile|, except with no origin set. |
| 365 sync_pb::EntitySpecifics specifics; | 359 sync_pb::EntitySpecifics specifics; |
| 366 sync_pb::AutofillProfileSpecifics* autofill_specifics = | 360 sync_pb::AutofillProfileSpecifics* autofill_specifics = |
| 367 specifics.mutable_autofill_profile(); | 361 specifics.mutable_autofill_profile(); |
| 368 autofill_specifics->set_guid(profile.guid()); | 362 autofill_specifics->set_guid(profile.guid()); |
| 369 autofill_specifics->add_name_first("John"); | 363 autofill_specifics->add_name_first("John"); |
| 370 autofill_specifics->add_name_middle(std::string()); | 364 autofill_specifics->add_name_middle(std::string()); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 398 autofill_syncable_service_.StopSyncing(syncer::AUTOFILL_PROFILE); | 392 autofill_syncable_service_.StopSyncing(syncer::AUTOFILL_PROFILE); |
| 399 } | 393 } |
| 400 | 394 |
| 401 TEST_F(AutofillProfileSyncableServiceTest, GetAllSyncData) { | 395 TEST_F(AutofillProfileSyncableServiceTest, GetAllSyncData) { |
| 402 std::vector<AutofillProfile*> profiles_from_web_db; | 396 std::vector<AutofillProfile*> profiles_from_web_db; |
| 403 std::string guid_present1 = kGuid1; | 397 std::string guid_present1 = kGuid1; |
| 404 std::string guid_present2 = kGuid2; | 398 std::string guid_present2 = kGuid2; |
| 405 | 399 |
| 406 profiles_from_web_db.push_back( | 400 profiles_from_web_db.push_back( |
| 407 new AutofillProfile(guid_present1, kHttpOrigin)); | 401 new AutofillProfile(guid_present1, kHttpOrigin)); |
| 408 profiles_from_web_db.back()->SetRawInfo( | 402 profiles_from_web_db.back()->SetRawInfo(NAME_FIRST, UTF8ToUTF16("John")); |
| 409 autofill::NAME_FIRST, UTF8ToUTF16("John")); | |
| 410 profiles_from_web_db.push_back( | 403 profiles_from_web_db.push_back( |
| 411 new AutofillProfile(guid_present2, kHttpsOrigin)); | 404 new AutofillProfile(guid_present2, kHttpsOrigin)); |
| 412 profiles_from_web_db.back()->SetRawInfo( | 405 profiles_from_web_db.back()->SetRawInfo(NAME_FIRST, UTF8ToUTF16("Jane")); |
| 413 autofill::NAME_FIRST, UTF8ToUTF16("Jane")); | |
| 414 | 406 |
| 415 syncer::SyncChangeList expected_change_list; | 407 syncer::SyncChangeList expected_change_list; |
| 416 expected_change_list.push_back( | 408 expected_change_list.push_back( |
| 417 syncer::SyncChange(FROM_HERE, | 409 syncer::SyncChange(FROM_HERE, |
| 418 syncer::SyncChange::ACTION_ADD, | 410 syncer::SyncChange::ACTION_ADD, |
| 419 MockAutofillProfileSyncableService::CreateData( | 411 MockAutofillProfileSyncableService::CreateData( |
| 420 *profiles_from_web_db.front()))); | 412 *profiles_from_web_db.front()))); |
| 421 expected_change_list.push_back( | 413 expected_change_list.push_back( |
| 422 syncer::SyncChange(FROM_HERE, | 414 syncer::SyncChange(FROM_HERE, |
| 423 syncer::SyncChange::ACTION_ADD, | 415 syncer::SyncChange::ACTION_ADD, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 441 autofill_syncable_service_.StopSyncing(syncer::AUTOFILL_PROFILE); | 433 autofill_syncable_service_.StopSyncing(syncer::AUTOFILL_PROFILE); |
| 442 } | 434 } |
| 443 | 435 |
| 444 TEST_F(AutofillProfileSyncableServiceTest, ProcessSyncChanges) { | 436 TEST_F(AutofillProfileSyncableServiceTest, ProcessSyncChanges) { |
| 445 std::vector<AutofillProfile *> profiles_from_web_db; | 437 std::vector<AutofillProfile *> profiles_from_web_db; |
| 446 std::string guid_present = kGuid1; | 438 std::string guid_present = kGuid1; |
| 447 std::string guid_synced = kGuid2; | 439 std::string guid_synced = kGuid2; |
| 448 | 440 |
| 449 syncer::SyncChangeList change_list; | 441 syncer::SyncChangeList change_list; |
| 450 AutofillProfile profile(guid_synced, kHttpOrigin); | 442 AutofillProfile profile(guid_synced, kHttpOrigin); |
| 451 profile.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("Jane")); | 443 profile.SetRawInfo(NAME_FIRST, UTF8ToUTF16("Jane")); |
| 452 change_list.push_back( | 444 change_list.push_back( |
| 453 syncer::SyncChange( | 445 syncer::SyncChange( |
| 454 FROM_HERE, | 446 FROM_HERE, |
| 455 syncer::SyncChange::ACTION_ADD, | 447 syncer::SyncChange::ACTION_ADD, |
| 456 MockAutofillProfileSyncableService::CreateData(profile))); | 448 MockAutofillProfileSyncableService::CreateData(profile))); |
| 457 AutofillProfile empty_profile(guid_present, kHttpsOrigin); | 449 AutofillProfile empty_profile(guid_present, kHttpsOrigin); |
| 458 change_list.push_back( | 450 change_list.push_back( |
| 459 syncer::SyncChange( | 451 syncer::SyncChange( |
| 460 FROM_HERE, | 452 FROM_HERE, |
| 461 syncer::SyncChange::ACTION_DELETE, | 453 syncer::SyncChange::ACTION_DELETE, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 477 EXPECT_FALSE(error.IsSet()); | 469 EXPECT_FALSE(error.IsSet()); |
| 478 } | 470 } |
| 479 | 471 |
| 480 TEST_F(AutofillProfileSyncableServiceTest, AutofillProfileAdded) { | 472 TEST_F(AutofillProfileSyncableServiceTest, AutofillProfileAdded) { |
| 481 // Will be owned by the syncable service. Keep a reference available here for | 473 // Will be owned by the syncable service. Keep a reference available here for |
| 482 // verifying test expectations. | 474 // verifying test expectations. |
| 483 TestSyncChangeProcessor* sync_change_processor = new TestSyncChangeProcessor; | 475 TestSyncChangeProcessor* sync_change_processor = new TestSyncChangeProcessor; |
| 484 autofill_syncable_service_.set_sync_processor(sync_change_processor); | 476 autofill_syncable_service_.set_sync_processor(sync_change_processor); |
| 485 | 477 |
| 486 AutofillProfile profile(kGuid1, kHttpsOrigin); | 478 AutofillProfile profile(kGuid1, kHttpsOrigin); |
| 487 profile.SetRawInfo(autofill::NAME_FIRST, UTF8ToUTF16("Jane")); | 479 profile.SetRawInfo(NAME_FIRST, UTF8ToUTF16("Jane")); |
| 488 AutofillProfileChange change(AutofillProfileChange::ADD, kGuid1, &profile); | 480 AutofillProfileChange change(AutofillProfileChange::ADD, kGuid1, &profile); |
| 489 autofill_syncable_service_.AutofillProfileChanged(change); | 481 autofill_syncable_service_.AutofillProfileChanged(change); |
| 490 | 482 |
| 491 ASSERT_EQ(1U, sync_change_processor->changes().size()); | 483 ASSERT_EQ(1U, sync_change_processor->changes().size()); |
| 492 syncer::SyncChange result = sync_change_processor->changes()[0]; | 484 syncer::SyncChange result = sync_change_processor->changes()[0]; |
| 493 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, result.change_type()); | 485 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, result.change_type()); |
| 494 | 486 |
| 495 sync_pb::AutofillProfileSpecifics specifics = | 487 sync_pb::AutofillProfileSpecifics specifics = |
| 496 result.sync_data().GetSpecifics().autofill_profile(); | 488 result.sync_data().GetSpecifics().autofill_profile(); |
| 497 EXPECT_EQ(kGuid1, specifics.guid()); | 489 EXPECT_EQ(kGuid1, specifics.guid()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 513 EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, result.change_type()); | 505 EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, result.change_type()); |
| 514 sync_pb::AutofillProfileSpecifics specifics = | 506 sync_pb::AutofillProfileSpecifics specifics = |
| 515 result.sync_data().GetSpecifics().autofill_profile(); | 507 result.sync_data().GetSpecifics().autofill_profile(); |
| 516 EXPECT_EQ(kGuid2, specifics.guid()); | 508 EXPECT_EQ(kGuid2, specifics.guid()); |
| 517 } | 509 } |
| 518 | 510 |
| 519 TEST_F(AutofillProfileSyncableServiceTest, UpdateField) { | 511 TEST_F(AutofillProfileSyncableServiceTest, UpdateField) { |
| 520 AutofillProfile profile(kGuid1, kSettingsOrigin); | 512 AutofillProfile profile(kGuid1, kSettingsOrigin); |
| 521 std::string company1 = "A Company"; | 513 std::string company1 = "A Company"; |
| 522 std::string company2 = "Another Company"; | 514 std::string company2 = "Another Company"; |
| 523 profile.SetRawInfo(autofill::COMPANY_NAME, UTF8ToUTF16(company1)); | 515 profile.SetRawInfo(COMPANY_NAME, UTF8ToUTF16(company1)); |
| 524 EXPECT_FALSE(AutofillProfileSyncableService::UpdateField( | 516 EXPECT_FALSE(AutofillProfileSyncableService::UpdateField( |
| 525 autofill::COMPANY_NAME, company1, &profile)); | 517 COMPANY_NAME, company1, &profile)); |
| 526 EXPECT_EQ(profile.GetRawInfo(autofill::COMPANY_NAME), UTF8ToUTF16(company1)); | 518 EXPECT_EQ(profile.GetRawInfo(COMPANY_NAME), UTF8ToUTF16(company1)); |
| 527 EXPECT_TRUE(AutofillProfileSyncableService::UpdateField( | 519 EXPECT_TRUE(AutofillProfileSyncableService::UpdateField( |
| 528 autofill::COMPANY_NAME, company2, &profile)); | 520 COMPANY_NAME, company2, &profile)); |
| 529 EXPECT_EQ(profile.GetRawInfo(autofill::COMPANY_NAME), UTF8ToUTF16(company2)); | 521 EXPECT_EQ(profile.GetRawInfo(COMPANY_NAME), UTF8ToUTF16(company2)); |
| 530 EXPECT_FALSE(AutofillProfileSyncableService::UpdateField( | 522 EXPECT_FALSE(AutofillProfileSyncableService::UpdateField( |
| 531 autofill::COMPANY_NAME, company2, &profile)); | 523 COMPANY_NAME, company2, &profile)); |
| 532 EXPECT_EQ(profile.GetRawInfo(autofill::COMPANY_NAME), UTF8ToUTF16(company2)); | 524 EXPECT_EQ(profile.GetRawInfo(COMPANY_NAME), UTF8ToUTF16(company2)); |
| 533 } | 525 } |
| 534 | 526 |
| 535 TEST_F(AutofillProfileSyncableServiceTest, UpdateMultivaluedField) { | 527 TEST_F(AutofillProfileSyncableServiceTest, UpdateMultivaluedField) { |
| 536 AutofillProfile profile(kGuid1, kHttpsOrigin); | 528 AutofillProfile profile(kGuid1, kHttpsOrigin); |
| 537 | 529 |
| 538 std::vector<base::string16> values; | 530 std::vector<base::string16> values; |
| 539 values.push_back(UTF8ToUTF16("1@1.com")); | 531 values.push_back(UTF8ToUTF16("1@1.com")); |
| 540 values.push_back(UTF8ToUTF16("2@1.com")); | 532 values.push_back(UTF8ToUTF16("2@1.com")); |
| 541 profile.SetRawMultiInfo(autofill::EMAIL_ADDRESS, values); | 533 profile.SetRawMultiInfo(EMAIL_ADDRESS, values); |
| 542 | 534 |
| 543 ::google::protobuf::RepeatedPtrField<std::string> specifics_fields; | 535 ::google::protobuf::RepeatedPtrField<std::string> specifics_fields; |
| 544 specifics_fields.AddAllocated(new std::string("2@1.com")); | 536 specifics_fields.AddAllocated(new std::string("2@1.com")); |
| 545 specifics_fields.AddAllocated(new std::string("3@1.com")); | 537 specifics_fields.AddAllocated(new std::string("3@1.com")); |
| 546 | 538 |
| 547 EXPECT_TRUE(AutofillProfileSyncableService::UpdateMultivaluedField( | 539 EXPECT_TRUE(AutofillProfileSyncableService::UpdateMultivaluedField( |
| 548 autofill::EMAIL_ADDRESS, specifics_fields, &profile)); | 540 EMAIL_ADDRESS, specifics_fields, &profile)); |
| 549 profile.GetRawMultiInfo(autofill::EMAIL_ADDRESS, &values); | 541 profile.GetRawMultiInfo(EMAIL_ADDRESS, &values); |
| 550 ASSERT_TRUE(values.size() == 2); | 542 ASSERT_TRUE(values.size() == 2); |
| 551 EXPECT_EQ(values[0], UTF8ToUTF16("2@1.com")); | 543 EXPECT_EQ(values[0], UTF8ToUTF16("2@1.com")); |
| 552 EXPECT_EQ(values[1], UTF8ToUTF16("3@1.com")); | 544 EXPECT_EQ(values[1], UTF8ToUTF16("3@1.com")); |
| 553 | 545 |
| 554 EXPECT_FALSE(AutofillProfileSyncableService::UpdateMultivaluedField( | 546 EXPECT_FALSE(AutofillProfileSyncableService::UpdateMultivaluedField( |
| 555 autofill::EMAIL_ADDRESS, specifics_fields, &profile)); | 547 EMAIL_ADDRESS, specifics_fields, &profile)); |
| 556 profile.GetRawMultiInfo(autofill::EMAIL_ADDRESS, &values); | 548 profile.GetRawMultiInfo(EMAIL_ADDRESS, &values); |
| 557 ASSERT_EQ(values.size(), 2U); | 549 ASSERT_EQ(values.size(), 2U); |
| 558 EXPECT_EQ(values[0], UTF8ToUTF16("2@1.com")); | 550 EXPECT_EQ(values[0], UTF8ToUTF16("2@1.com")); |
| 559 EXPECT_EQ(values[1], UTF8ToUTF16("3@1.com")); | 551 EXPECT_EQ(values[1], UTF8ToUTF16("3@1.com")); |
| 560 EXPECT_TRUE(AutofillProfileSyncableService::UpdateMultivaluedField( | 552 EXPECT_TRUE(AutofillProfileSyncableService::UpdateMultivaluedField( |
| 561 autofill::EMAIL_ADDRESS, | 553 EMAIL_ADDRESS, ::google::protobuf::RepeatedPtrField<std::string>(), |
| 562 ::google::protobuf::RepeatedPtrField<std::string>(), | |
| 563 &profile)); | 554 &profile)); |
| 564 profile.GetRawMultiInfo(autofill::EMAIL_ADDRESS, &values); | 555 profile.GetRawMultiInfo(EMAIL_ADDRESS, &values); |
| 565 ASSERT_EQ(values.size(), 1U); // Always have at least an empty string. | 556 ASSERT_EQ(values.size(), 1U); // Always have at least an empty string. |
| 566 EXPECT_EQ(values[0], UTF8ToUTF16("")); | 557 EXPECT_EQ(values[0], UTF8ToUTF16("")); |
| 567 } | 558 } |
| 568 | 559 |
| 569 TEST_F(AutofillProfileSyncableServiceTest, MergeProfile) { | 560 TEST_F(AutofillProfileSyncableServiceTest, MergeProfile) { |
| 570 AutofillProfile profile1(kGuid1, kHttpOrigin); | 561 AutofillProfile profile1(kGuid1, kHttpOrigin); |
| 571 profile1.SetRawInfo( | 562 profile1.SetRawInfo(ADDRESS_HOME_LINE1, UTF8ToUTF16("111 First St.")); |
| 572 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("111 First St.")); | |
| 573 | 563 |
| 574 std::vector<base::string16> values; | 564 std::vector<base::string16> values; |
| 575 values.push_back(UTF8ToUTF16("1@1.com")); | 565 values.push_back(UTF8ToUTF16("1@1.com")); |
| 576 values.push_back(UTF8ToUTF16("2@1.com")); | 566 values.push_back(UTF8ToUTF16("2@1.com")); |
| 577 profile1.SetRawMultiInfo(autofill::EMAIL_ADDRESS, values); | 567 profile1.SetRawMultiInfo(EMAIL_ADDRESS, values); |
| 578 | 568 |
| 579 AutofillProfile profile2(kGuid2, kHttpsOrigin); | 569 AutofillProfile profile2(kGuid2, kHttpsOrigin); |
| 580 profile2.SetRawInfo( | 570 profile2.SetRawInfo(ADDRESS_HOME_LINE1, UTF8ToUTF16("111 First St.")); |
| 581 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("111 First St.")); | |
| 582 | 571 |
| 583 // |values| now is [ "1@1.com", "2@1.com", "3@1.com" ]. | 572 // |values| now is [ "1@1.com", "2@1.com", "3@1.com" ]. |
| 584 values.push_back(UTF8ToUTF16("3@1.com")); | 573 values.push_back(UTF8ToUTF16("3@1.com")); |
| 585 profile2.SetRawMultiInfo(autofill::EMAIL_ADDRESS, values); | 574 profile2.SetRawMultiInfo(EMAIL_ADDRESS, values); |
| 586 | 575 |
| 587 values.clear(); | 576 values.clear(); |
| 588 values.push_back(UTF8ToUTF16("John")); | 577 values.push_back(UTF8ToUTF16("John")); |
| 589 profile1.SetRawMultiInfo(autofill::NAME_FIRST, values); | 578 profile1.SetRawMultiInfo(NAME_FIRST, values); |
| 590 values.push_back(UTF8ToUTF16("Jane")); | 579 values.push_back(UTF8ToUTF16("Jane")); |
| 591 profile2.SetRawMultiInfo(autofill::NAME_FIRST, values); | 580 profile2.SetRawMultiInfo(NAME_FIRST, values); |
| 592 | 581 |
| 593 values.clear(); | 582 values.clear(); |
| 594 values.push_back(UTF8ToUTF16("Doe")); | 583 values.push_back(UTF8ToUTF16("Doe")); |
| 595 profile1.SetRawMultiInfo(autofill::NAME_LAST, values); | 584 profile1.SetRawMultiInfo(NAME_LAST, values); |
| 596 values.push_back(UTF8ToUTF16("Other")); | 585 values.push_back(UTF8ToUTF16("Other")); |
| 597 profile2.SetRawMultiInfo(autofill::NAME_LAST, values); | 586 profile2.SetRawMultiInfo(NAME_LAST, values); |
| 598 | 587 |
| 599 values.clear(); | 588 values.clear(); |
| 600 values.push_back(UTF8ToUTF16("650234567")); | 589 values.push_back(UTF8ToUTF16("650234567")); |
| 601 profile2.SetRawMultiInfo(autofill::PHONE_HOME_WHOLE_NUMBER, values); | 590 profile2.SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, values); |
| 602 | 591 |
| 603 EXPECT_FALSE(AutofillProfileSyncableService::MergeProfile(profile2, | 592 EXPECT_FALSE(AutofillProfileSyncableService::MergeProfile(profile2, |
| 604 &profile1, | 593 &profile1, |
| 605 "en-US")); | 594 "en-US")); |
| 606 | 595 |
| 607 profile1.GetRawMultiInfo(autofill::NAME_FIRST, &values); | 596 profile1.GetRawMultiInfo(NAME_FIRST, &values); |
| 608 ASSERT_EQ(values.size(), 2U); | 597 ASSERT_EQ(values.size(), 2U); |
| 609 EXPECT_EQ(values[0], UTF8ToUTF16("John")); | 598 EXPECT_EQ(values[0], UTF8ToUTF16("John")); |
| 610 EXPECT_EQ(values[1], UTF8ToUTF16("Jane")); | 599 EXPECT_EQ(values[1], UTF8ToUTF16("Jane")); |
| 611 | 600 |
| 612 profile1.GetRawMultiInfo(autofill::NAME_LAST, &values); | 601 profile1.GetRawMultiInfo(NAME_LAST, &values); |
| 613 ASSERT_EQ(values.size(), 2U); | 602 ASSERT_EQ(values.size(), 2U); |
| 614 EXPECT_EQ(values[0], UTF8ToUTF16("Doe")); | 603 EXPECT_EQ(values[0], UTF8ToUTF16("Doe")); |
| 615 EXPECT_EQ(values[1], UTF8ToUTF16("Other")); | 604 EXPECT_EQ(values[1], UTF8ToUTF16("Other")); |
| 616 | 605 |
| 617 profile1.GetRawMultiInfo(autofill::EMAIL_ADDRESS, &values); | 606 profile1.GetRawMultiInfo(EMAIL_ADDRESS, &values); |
| 618 ASSERT_EQ(values.size(), 3U); | 607 ASSERT_EQ(values.size(), 3U); |
| 619 EXPECT_EQ(values[0], UTF8ToUTF16("1@1.com")); | 608 EXPECT_EQ(values[0], UTF8ToUTF16("1@1.com")); |
| 620 EXPECT_EQ(values[1], UTF8ToUTF16("2@1.com")); | 609 EXPECT_EQ(values[1], UTF8ToUTF16("2@1.com")); |
| 621 EXPECT_EQ(values[2], UTF8ToUTF16("3@1.com")); | 610 EXPECT_EQ(values[2], UTF8ToUTF16("3@1.com")); |
| 622 | 611 |
| 623 profile1.GetRawMultiInfo(autofill::PHONE_HOME_WHOLE_NUMBER, &values); | 612 profile1.GetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, &values); |
| 624 ASSERT_EQ(values.size(), 1U); | 613 ASSERT_EQ(values.size(), 1U); |
| 625 EXPECT_EQ(values[0], UTF8ToUTF16("650234567")); | 614 EXPECT_EQ(values[0], UTF8ToUTF16("650234567")); |
| 626 | 615 |
| 627 EXPECT_EQ(profile2.origin(), profile1.origin()); | 616 EXPECT_EQ(profile2.origin(), profile1.origin()); |
| 628 | 617 |
| 629 AutofillProfile profile3(kGuid3, kHttpOrigin); | 618 AutofillProfile profile3(kGuid3, kHttpOrigin); |
| 630 profile3.SetRawInfo( | 619 profile3.SetRawInfo(ADDRESS_HOME_LINE1, UTF8ToUTF16("111 First St.")); |
| 631 autofill::ADDRESS_HOME_LINE1, UTF8ToUTF16("111 First St.")); | |
| 632 | 620 |
| 633 values.clear(); | 621 values.clear(); |
| 634 values.push_back(UTF8ToUTF16("Jane")); | 622 values.push_back(UTF8ToUTF16("Jane")); |
| 635 profile3.SetRawMultiInfo(autofill::NAME_FIRST, values); | 623 profile3.SetRawMultiInfo(NAME_FIRST, values); |
| 636 | 624 |
| 637 values.clear(); | 625 values.clear(); |
| 638 values.push_back(UTF8ToUTF16("Doe")); | 626 values.push_back(UTF8ToUTF16("Doe")); |
| 639 profile3.SetRawMultiInfo(autofill::NAME_LAST, values); | 627 profile3.SetRawMultiInfo(NAME_LAST, values); |
| 640 | 628 |
| 641 EXPECT_TRUE(AutofillProfileSyncableService::MergeProfile(profile3, | 629 EXPECT_TRUE(AutofillProfileSyncableService::MergeProfile(profile3, |
| 642 &profile1, | 630 &profile1, |
| 643 "en-US")); | 631 "en-US")); |
| 644 | 632 |
| 645 profile1.GetRawMultiInfo(autofill::NAME_FIRST, &values); | 633 profile1.GetRawMultiInfo(NAME_FIRST, &values); |
| 646 ASSERT_EQ(values.size(), 3U); | 634 ASSERT_EQ(values.size(), 3U); |
| 647 EXPECT_EQ(values[0], UTF8ToUTF16("John")); | 635 EXPECT_EQ(values[0], UTF8ToUTF16("John")); |
| 648 EXPECT_EQ(values[1], UTF8ToUTF16("Jane")); | 636 EXPECT_EQ(values[1], UTF8ToUTF16("Jane")); |
| 649 EXPECT_EQ(values[2], UTF8ToUTF16("Jane")); | 637 EXPECT_EQ(values[2], UTF8ToUTF16("Jane")); |
| 650 | 638 |
| 651 profile1.GetRawMultiInfo(autofill::NAME_LAST, &values); | 639 profile1.GetRawMultiInfo(NAME_LAST, &values); |
| 652 ASSERT_EQ(values.size(), 3U); | 640 ASSERT_EQ(values.size(), 3U); |
| 653 EXPECT_EQ(values[0], UTF8ToUTF16("Doe")); | 641 EXPECT_EQ(values[0], UTF8ToUTF16("Doe")); |
| 654 EXPECT_EQ(values[1], UTF8ToUTF16("Other")); | 642 EXPECT_EQ(values[1], UTF8ToUTF16("Other")); |
| 655 EXPECT_EQ(values[2], UTF8ToUTF16("Doe")); | 643 EXPECT_EQ(values[2], UTF8ToUTF16("Doe")); |
| 656 | 644 |
| 657 // Middle name should have three entries as well. | 645 // Middle name should have three entries as well. |
| 658 profile1.GetRawMultiInfo(autofill::NAME_MIDDLE, &values); | 646 profile1.GetRawMultiInfo(NAME_MIDDLE, &values); |
| 659 ASSERT_EQ(values.size(), 3U); | 647 ASSERT_EQ(values.size(), 3U); |
| 660 EXPECT_TRUE(values[0].empty()); | 648 EXPECT_TRUE(values[0].empty()); |
| 661 EXPECT_TRUE(values[1].empty()); | 649 EXPECT_TRUE(values[1].empty()); |
| 662 EXPECT_TRUE(values[2].empty()); | 650 EXPECT_TRUE(values[2].empty()); |
| 663 | 651 |
| 664 profile1.GetRawMultiInfo(autofill::EMAIL_ADDRESS, &values); | 652 profile1.GetRawMultiInfo(EMAIL_ADDRESS, &values); |
| 665 ASSERT_EQ(values.size(), 3U); | 653 ASSERT_EQ(values.size(), 3U); |
| 666 EXPECT_EQ(values[0], UTF8ToUTF16("1@1.com")); | 654 EXPECT_EQ(values[0], UTF8ToUTF16("1@1.com")); |
| 667 EXPECT_EQ(values[1], UTF8ToUTF16("2@1.com")); | 655 EXPECT_EQ(values[1], UTF8ToUTF16("2@1.com")); |
| 668 EXPECT_EQ(values[2], UTF8ToUTF16("3@1.com")); | 656 EXPECT_EQ(values[2], UTF8ToUTF16("3@1.com")); |
| 669 | 657 |
| 670 profile1.GetRawMultiInfo(autofill::PHONE_HOME_WHOLE_NUMBER, &values); | 658 profile1.GetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, &values); |
| 671 ASSERT_EQ(values.size(), 1U); | 659 ASSERT_EQ(values.size(), 1U); |
| 672 EXPECT_EQ(values[0], UTF8ToUTF16("650234567")); | 660 EXPECT_EQ(values[0], UTF8ToUTF16("650234567")); |
| 673 } | 661 } |
| 662 |
| 663 } // namespace autofill |
| OLD | NEW |