| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 <set> | 5 #include <set> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 #include "chrome/browser/sync/test_profile_sync_service.h" | 37 #include "chrome/browser/sync/test_profile_sync_service.h" |
| 38 #include "chrome/browser/webdata/autocomplete_syncable_service.h" | 38 #include "chrome/browser/webdata/autocomplete_syncable_service.h" |
| 39 #include "chrome/browser/webdata/autofill_change.h" | 39 #include "chrome/browser/webdata/autofill_change.h" |
| 40 #include "chrome/browser/webdata/autofill_entry.h" | 40 #include "chrome/browser/webdata/autofill_entry.h" |
| 41 #include "chrome/browser/webdata/autofill_profile_syncable_service.h" | 41 #include "chrome/browser/webdata/autofill_profile_syncable_service.h" |
| 42 #include "chrome/browser/webdata/autofill_table.h" | 42 #include "chrome/browser/webdata/autofill_table.h" |
| 43 #include "chrome/browser/webdata/autofill_web_data_service.h" | 43 #include "chrome/browser/webdata/autofill_web_data_service.h" |
| 44 #include "chrome/browser/webdata/web_data_service_factory.h" | 44 #include "chrome/browser/webdata/web_data_service_factory.h" |
| 45 #include "chrome/browser/webdata/web_data_service_test_util.h" | 45 #include "chrome/browser/webdata/web_data_service_test_util.h" |
| 46 #include "chrome/browser/webdata/web_database.h" | 46 #include "chrome/browser/webdata/web_database.h" |
| 47 #include "chrome/common/chrome_notification_types.h" | |
| 48 #include "components/autofill/browser/autofill_common_test.h" | 47 #include "components/autofill/browser/autofill_common_test.h" |
| 49 #include "components/autofill/browser/personal_data_manager.h" | 48 #include "components/autofill/browser/personal_data_manager.h" |
| 50 #include "content/public/browser/notification_source.h" | |
| 51 #include "content/public/test/test_browser_thread.h" | 49 #include "content/public/test/test_browser_thread.h" |
| 52 #include "google_apis/gaia/gaia_constants.h" | 50 #include "google_apis/gaia/gaia_constants.h" |
| 53 #include "sync/internal_api/public/base/model_type.h" | 51 #include "sync/internal_api/public/base/model_type.h" |
| 54 #include "sync/internal_api/public/read_node.h" | 52 #include "sync/internal_api/public/read_node.h" |
| 55 #include "sync/internal_api/public/read_transaction.h" | 53 #include "sync/internal_api/public/read_transaction.h" |
| 56 #include "sync/internal_api/public/write_node.h" | 54 #include "sync/internal_api/public/write_node.h" |
| 57 #include "sync/internal_api/public/write_transaction.h" | 55 #include "sync/internal_api/public/write_transaction.h" |
| 58 #include "sync/protocol/autofill_specifics.pb.h" | 56 #include "sync/protocol/autofill_specifics.pb.h" |
| 59 #include "sync/syncable/mutable_entry.h" | 57 #include "sync/syncable/mutable_entry.h" |
| 60 #include "sync/syncable/syncable_write_transaction.h" | 58 #include "sync/syncable/syncable_write_transaction.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 86 using testing::ElementsAre; | 84 using testing::ElementsAre; |
| 87 using testing::SetArgumentPointee; | 85 using testing::SetArgumentPointee; |
| 88 using testing::Return; | 86 using testing::Return; |
| 89 | 87 |
| 90 namespace syncable { | 88 namespace syncable { |
| 91 class Id; | 89 class Id; |
| 92 } | 90 } |
| 93 | 91 |
| 94 class HistoryService; | 92 class HistoryService; |
| 95 | 93 |
| 94 namespace { |
| 95 |
| 96 void RunAndSignal(const base::Closure& cb, WaitableEvent* event) { |
| 97 cb.Run(); |
| 98 event->Signal(); |
| 99 } |
| 100 |
| 101 } // namespace |
| 102 |
| 96 class AutofillTableMock : public AutofillTable { | 103 class AutofillTableMock : public AutofillTable { |
| 97 public: | 104 public: |
| 98 AutofillTableMock() : AutofillTable() {} | 105 AutofillTableMock() : AutofillTable() {} |
| 99 MOCK_METHOD2(RemoveFormElement, | 106 MOCK_METHOD2(RemoveFormElement, |
| 100 bool(const string16& name, const string16& value)); // NOLINT | 107 bool(const string16& name, const string16& value)); // NOLINT |
| 101 MOCK_METHOD1(GetAllAutofillEntries, | 108 MOCK_METHOD1(GetAllAutofillEntries, |
| 102 bool(std::vector<AutofillEntry>* entries)); // NOLINT | 109 bool(std::vector<AutofillEntry>* entries)); // NOLINT |
| 103 MOCK_METHOD3(GetAutofillTimestamps, | 110 MOCK_METHOD3(GetAutofillTimestamps, |
| 104 bool(const string16& name, // NOLINT | 111 bool(const string16& name, // NOLINT |
| 105 const string16& value, | 112 const string16& value, |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 | 175 |
| 169 private: | 176 private: |
| 170 virtual ~TokenWebDataServiceFake() {} | 177 virtual ~TokenWebDataServiceFake() {} |
| 171 | 178 |
| 172 DISALLOW_COPY_AND_ASSIGN(TokenWebDataServiceFake); | 179 DISALLOW_COPY_AND_ASSIGN(TokenWebDataServiceFake); |
| 173 }; | 180 }; |
| 174 | 181 |
| 175 class WebDataServiceFake : public AutofillWebDataService { | 182 class WebDataServiceFake : public AutofillWebDataService { |
| 176 public: | 183 public: |
| 177 WebDataServiceFake() | 184 WebDataServiceFake() |
| 178 : AutofillWebDataService( | 185 : AutofillWebDataService(NULL, |
| 179 NULL, WebDataServiceBase::ProfileErrorCallback()), | 186 WebDataServiceBase::ProfileErrorCallback()), |
| 180 web_database_(NULL), | 187 web_database_(NULL), |
| 188 autocomplete_syncable_service_(NULL), |
| 189 autofill_profile_syncable_service_(NULL), |
| 181 syncable_service_created_or_destroyed_(false, false) { | 190 syncable_service_created_or_destroyed_(false, false) { |
| 182 } | 191 } |
| 183 | 192 |
| 184 void SetDatabase(WebDatabase* web_database) { | 193 void SetDatabase(WebDatabase* web_database) { |
| 185 web_database_ = web_database; | 194 web_database_ = web_database; |
| 186 } | 195 } |
| 187 | 196 |
| 188 void StartSyncableService() { | 197 void StartSyncableService() { |
| 189 // The |autofill_profile_syncable_service_| must be constructed on the DB | 198 // The |autofill_profile_syncable_service_| must be constructed on the DB |
| 190 // thread. | 199 // thread. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 206 virtual bool IsDatabaseLoaded() OVERRIDE { | 215 virtual bool IsDatabaseLoaded() OVERRIDE { |
| 207 return true; | 216 return true; |
| 208 } | 217 } |
| 209 | 218 |
| 210 virtual WebDatabase* GetDatabase() OVERRIDE { | 219 virtual WebDatabase* GetDatabase() OVERRIDE { |
| 211 return web_database_; | 220 return web_database_; |
| 212 } | 221 } |
| 213 | 222 |
| 214 virtual void ShutdownOnUIThread() OVERRIDE {} | 223 virtual void ShutdownOnUIThread() OVERRIDE {} |
| 215 | 224 |
| 225 void OnAutofillEntriesChanged(const AutofillChangeList& changes) { |
| 226 WaitableEvent event(true, false); |
| 227 |
| 228 base::Closure notify_cb = |
| 229 base::Bind(&AutocompleteSyncableService::AutofillEntriesChanged, |
| 230 base::Unretained(autocomplete_syncable_service_), |
| 231 changes); |
| 232 BrowserThread::PostTask( |
| 233 BrowserThread::DB, |
| 234 FROM_HERE, |
| 235 base::Bind(&RunAndSignal, notify_cb, &event)); |
| 236 event.Wait(); |
| 237 } |
| 238 |
| 239 void OnAutofillProfileChanged(const AutofillProfileChange& changes) { |
| 240 WaitableEvent event(true, false); |
| 241 |
| 242 base::Closure notify_cb = |
| 243 base::Bind(&AutocompleteSyncableService::AutofillProfileChanged, |
| 244 base::Unretained(autofill_profile_syncable_service_), |
| 245 changes); |
| 246 BrowserThread::PostTask( |
| 247 BrowserThread::DB, |
| 248 FROM_HERE, |
| 249 base::Bind(&RunAndSignal, notify_cb, &event)); |
| 250 event.Wait(); |
| 251 } |
| 252 |
| 216 private: | 253 private: |
| 217 virtual ~WebDataServiceFake() {} | 254 virtual ~WebDataServiceFake() {} |
| 218 | 255 |
| 219 void CreateSyncableService() { | 256 void CreateSyncableService() { |
| 220 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 257 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 221 // These services are deleted in DestroySyncableService(). | 258 // These services are deleted in DestroySyncableService(). |
| 222 AutocompleteSyncableService::CreateForWebDataService(this); | 259 AutocompleteSyncableService::CreateForWebDataService(this); |
| 223 AutofillProfileSyncableService::CreateForWebDataService(this); | 260 AutofillProfileSyncableService::CreateForWebDataService(this); |
| 261 |
| 262 autocomplete_syncable_service_ = |
| 263 AutocompleteSyncableService::FromWebDataService(this); |
| 264 autofill_profile_syncable_service_ = |
| 265 AutofillProfileSyncableService::FromWebDataService(this); |
| 266 |
| 224 syncable_service_created_or_destroyed_.Signal(); | 267 syncable_service_created_or_destroyed_.Signal(); |
| 225 } | 268 } |
| 226 | 269 |
| 227 void DestroySyncableService() { | 270 void DestroySyncableService() { |
| 228 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 271 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 229 WebDataServiceBase::ShutdownOnDBThread(); | 272 WebDataServiceBase::ShutdownOnDBThread(); |
| 273 autocomplete_syncable_service_ = NULL; |
| 274 autofill_profile_syncable_service_ = NULL; |
| 230 syncable_service_created_or_destroyed_.Signal(); | 275 syncable_service_created_or_destroyed_.Signal(); |
| 231 } | 276 } |
| 232 | 277 |
| 233 WebDatabase* web_database_; | 278 WebDatabase* web_database_; |
| 279 AutocompleteSyncableService* autocomplete_syncable_service_; |
| 280 AutofillProfileSyncableService* autofill_profile_syncable_service_; |
| 234 | 281 |
| 235 WaitableEvent syncable_service_created_or_destroyed_; | 282 WaitableEvent syncable_service_created_or_destroyed_; |
| 236 | 283 |
| 237 DISALLOW_COPY_AND_ASSIGN(WebDataServiceFake); | 284 DISALLOW_COPY_AND_ASSIGN(WebDataServiceFake); |
| 238 }; | 285 }; |
| 239 | 286 |
| 240 ProfileKeyedService* BuildMockWebDataServiceWrapper(Profile* profile) { | 287 ProfileKeyedService* BuildMockWebDataServiceWrapper(Profile* profile) { |
| 241 return new MockWebDataServiceWrapper( | 288 return new MockWebDataServiceWrapper( |
| 242 new TokenWebDataServiceFake(), | 289 new TokenWebDataServiceFake(), |
| 243 new WebDataServiceFake()); | 290 new WebDataServiceFake()); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 MOCK_METHOD0(LoadCreditCards, void()); | 391 MOCK_METHOD0(LoadCreditCards, void()); |
| 345 MOCK_METHOD0(Refresh, void()); | 392 MOCK_METHOD0(Refresh, void()); |
| 346 }; | 393 }; |
| 347 | 394 |
| 348 class MockPersonalDataManagerService : public PersonalDataManagerService { | 395 class MockPersonalDataManagerService : public PersonalDataManagerService { |
| 349 public: | 396 public: |
| 350 static ProfileKeyedService* Build(Profile* profile) { | 397 static ProfileKeyedService* Build(Profile* profile) { |
| 351 return new MockPersonalDataManagerService(); | 398 return new MockPersonalDataManagerService(); |
| 352 } | 399 } |
| 353 | 400 |
| 354 MockPersonalDataManagerService() {} | 401 MockPersonalDataManagerService() { |
| 402 personal_data_manager_.reset(new MockPersonalDataManager()); |
| 403 } |
| 355 virtual ~MockPersonalDataManagerService() {} | 404 virtual ~MockPersonalDataManagerService() {} |
| 356 | 405 |
| 406 virtual void Shutdown() OVERRIDE { |
| 407 personal_data_manager_.reset(); |
| 408 } |
| 409 |
| 357 virtual MockPersonalDataManager* GetPersonalDataManager() OVERRIDE { | 410 virtual MockPersonalDataManager* GetPersonalDataManager() OVERRIDE { |
| 358 return &personal_data_manager_; | 411 return personal_data_manager_.get(); |
| 359 } | 412 } |
| 360 | 413 |
| 361 private: | 414 private: |
| 362 MockPersonalDataManager personal_data_manager_; | 415 scoped_ptr<MockPersonalDataManager> personal_data_manager_; |
| 363 DISALLOW_COPY_AND_ASSIGN(MockPersonalDataManagerService); | 416 DISALLOW_COPY_AND_ASSIGN(MockPersonalDataManagerService); |
| 364 }; | 417 }; |
| 365 | 418 |
| 366 template <class T> class AddAutofillHelper; | 419 template <class T> class AddAutofillHelper; |
| 367 | 420 |
| 368 class ProfileSyncServiceAutofillTest | 421 class ProfileSyncServiceAutofillTest |
| 369 : public AbstractProfileSyncServiceTest, | 422 : public AbstractProfileSyncServiceTest, |
| 370 public syncer::DataTypeDebugInfoListener { | 423 public syncer::DataTypeDebugInfoListener { |
| 371 public: | 424 public: |
| 372 // DataTypeDebugInfoListener implementation. | 425 // DataTypeDebugInfoListener implementation. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 personal_data_manager_service->GetPersonalDataManager(); | 473 personal_data_manager_service->GetPersonalDataManager(); |
| 421 | 474 |
| 422 token_service_ = static_cast<TokenService*>( | 475 token_service_ = static_cast<TokenService*>( |
| 423 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 476 TokenServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 424 profile_.get(), BuildTokenService)); | 477 profile_.get(), BuildTokenService)); |
| 425 EXPECT_CALL(*personal_data_manager_, LoadProfiles()).Times(1); | 478 EXPECT_CALL(*personal_data_manager_, LoadProfiles()).Times(1); |
| 426 EXPECT_CALL(*personal_data_manager_, LoadCreditCards()).Times(1); | 479 EXPECT_CALL(*personal_data_manager_, LoadCreditCards()).Times(1); |
| 427 | 480 |
| 428 personal_data_manager_->Init(profile_.get()); | 481 personal_data_manager_->Init(profile_.get()); |
| 429 | 482 |
| 430 // Note: This must be called *after* the notification service is created. | |
| 431 web_data_service_->StartSyncableService(); | 483 web_data_service_->StartSyncableService(); |
| 432 } | 484 } |
| 433 | 485 |
| 434 virtual void TearDown() OVERRIDE { | 486 virtual void TearDown() OVERRIDE { |
| 435 // Note: The tear down order is important. | 487 // Note: The tear down order is important. |
| 436 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory( | 488 ProfileSyncServiceFactory::GetInstance()->SetTestingFactory( |
| 437 profile_.get(), NULL); | 489 profile_.get(), NULL); |
| 438 web_data_service_->ShutdownSyncableService(); | 490 web_data_service_->ShutdownSyncableService(); |
| 439 profile_->ResetRequestContext(); | 491 profile_->ResetRequestContext(); |
| 440 // To prevent a leak, fully release TestURLRequestContext to ensure its | 492 // To prevent a leak, fully release TestURLRequestContext to ensure its |
| (...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1122 ASSERT_TRUE(create_root.success()); | 1174 ASSERT_TRUE(create_root.success()); |
| 1123 | 1175 |
| 1124 AutofillEntry added_entry(MakeAutofillEntry("added", "entry", 1)); | 1176 AutofillEntry added_entry(MakeAutofillEntry("added", "entry", 1)); |
| 1125 std::vector<base::Time> timestamps(added_entry.timestamps()); | 1177 std::vector<base::Time> timestamps(added_entry.timestamps()); |
| 1126 | 1178 |
| 1127 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)). | 1179 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)). |
| 1128 WillOnce(DoAll(SetArgumentPointee<2>(timestamps), Return(true))); | 1180 WillOnce(DoAll(SetArgumentPointee<2>(timestamps), Return(true))); |
| 1129 | 1181 |
| 1130 AutofillChangeList changes; | 1182 AutofillChangeList changes; |
| 1131 changes.push_back(AutofillChange(AutofillChange::ADD, added_entry.key())); | 1183 changes.push_back(AutofillChange(AutofillChange::ADD, added_entry.key())); |
| 1132 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier( | 1184 |
| 1133 db_thread_.DeprecatedGetThreadObject())); | 1185 web_data_service_->OnAutofillEntriesChanged(changes); |
| 1134 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, | |
| 1135 content::Source<AutofillWebDataService>( | |
| 1136 web_data_service_.get()), | |
| 1137 content::Details<AutofillChangeList>(&changes)); | |
| 1138 | 1186 |
| 1139 std::vector<AutofillEntry> new_sync_entries; | 1187 std::vector<AutofillEntry> new_sync_entries; |
| 1140 std::vector<AutofillProfile> new_sync_profiles; | 1188 std::vector<AutofillProfile> new_sync_profiles; |
| 1141 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, | 1189 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, |
| 1142 &new_sync_profiles)); | 1190 &new_sync_profiles)); |
| 1143 ASSERT_EQ(1U, new_sync_entries.size()); | 1191 ASSERT_EQ(1U, new_sync_entries.size()); |
| 1144 EXPECT_TRUE(added_entry == new_sync_entries[0]); | 1192 EXPECT_TRUE(added_entry == new_sync_entries[0]); |
| 1145 } | 1193 } |
| 1146 | 1194 |
| 1147 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeAddProfile) { | 1195 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeAddProfile) { |
| 1148 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); | 1196 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)).WillOnce(Return(true)); |
| 1149 EXPECT_CALL(*personal_data_manager_, Refresh()); | 1197 EXPECT_CALL(*personal_data_manager_, Refresh()); |
| 1150 SetIdleChangeProcessorExpectations(); | 1198 SetIdleChangeProcessorExpectations(); |
| 1151 CreateRootHelper create_root(this, syncer::AUTOFILL_PROFILE); | 1199 CreateRootHelper create_root(this, syncer::AUTOFILL_PROFILE); |
| 1152 StartSyncService(create_root.callback(), false, syncer::AUTOFILL_PROFILE); | 1200 StartSyncService(create_root.callback(), false, syncer::AUTOFILL_PROFILE); |
| 1153 ASSERT_TRUE(create_root.success()); | 1201 ASSERT_TRUE(create_root.success()); |
| 1154 | 1202 |
| 1155 AutofillProfile added_profile; | 1203 AutofillProfile added_profile; |
| 1156 autofill_test::SetProfileInfoWithGuid(&added_profile, | 1204 autofill_test::SetProfileInfoWithGuid(&added_profile, |
| 1157 "D6ADA912-D374-4C0A-917D-F5C8EBE43011", "Josephine", "Alicia", "Saenz", | 1205 "D6ADA912-D374-4C0A-917D-F5C8EBE43011", "Josephine", "Alicia", "Saenz", |
| 1158 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", | 1206 "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", |
| 1159 "32801", "US", "19482937549"); | 1207 "32801", "US", "19482937549"); |
| 1160 | 1208 |
| 1161 AutofillProfileChange change(AutofillProfileChange::ADD, | 1209 AutofillProfileChange change( |
| 1162 added_profile.guid(), &added_profile); | 1210 AutofillProfileChange::ADD, added_profile.guid(), &added_profile); |
| 1163 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier( | 1211 web_data_service_->OnAutofillProfileChanged(change); |
| 1164 db_thread_.DeprecatedGetThreadObject())); | |
| 1165 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED, | |
| 1166 content::Source<AutofillWebDataService>( | |
| 1167 web_data_service_.get()), | |
| 1168 content::Details<AutofillProfileChange>(&change)); | |
| 1169 | 1212 |
| 1170 std::vector<AutofillProfile> new_sync_profiles; | 1213 std::vector<AutofillProfile> new_sync_profiles; |
| 1171 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( | 1214 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( |
| 1172 &new_sync_profiles)); | 1215 &new_sync_profiles)); |
| 1173 ASSERT_EQ(1U, new_sync_profiles.size()); | 1216 ASSERT_EQ(1U, new_sync_profiles.size()); |
| 1174 EXPECT_EQ(0, added_profile.Compare(new_sync_profiles[0])); | 1217 EXPECT_EQ(0, added_profile.Compare(new_sync_profiles[0])); |
| 1175 } | 1218 } |
| 1176 | 1219 |
| 1177 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeUpdateEntry) { | 1220 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeUpdateEntry) { |
| 1178 AutofillEntry original_entry(MakeAutofillEntry("my", "entry", 1)); | 1221 AutofillEntry original_entry(MakeAutofillEntry("my", "entry", 1)); |
| 1179 std::vector<AutofillEntry> original_entries; | 1222 std::vector<AutofillEntry> original_entries; |
| 1180 original_entries.push_back(original_entry); | 1223 original_entries.push_back(original_entry); |
| 1181 | 1224 |
| 1182 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). | 1225 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). |
| 1183 WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true))); | 1226 WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true))); |
| 1184 EXPECT_CALL(*personal_data_manager_, Refresh()); | 1227 EXPECT_CALL(*personal_data_manager_, Refresh()); |
| 1185 CreateRootHelper create_root(this, syncer::AUTOFILL); | 1228 CreateRootHelper create_root(this, syncer::AUTOFILL); |
| 1186 StartSyncService(create_root.callback(), false, syncer::AUTOFILL); | 1229 StartSyncService(create_root.callback(), false, syncer::AUTOFILL); |
| 1187 ASSERT_TRUE(create_root.success()); | 1230 ASSERT_TRUE(create_root.success()); |
| 1188 | 1231 |
| 1189 AutofillEntry updated_entry(MakeAutofillEntry("my", "entry", 1, 2)); | 1232 AutofillEntry updated_entry(MakeAutofillEntry("my", "entry", 1, 2)); |
| 1190 std::vector<base::Time> timestamps(updated_entry.timestamps()); | 1233 std::vector<base::Time> timestamps(updated_entry.timestamps()); |
| 1191 | 1234 |
| 1192 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)). | 1235 EXPECT_CALL(autofill_table_, GetAutofillTimestamps(_, _, _)). |
| 1193 WillOnce(DoAll(SetArgumentPointee<2>(timestamps), Return(true))); | 1236 WillOnce(DoAll(SetArgumentPointee<2>(timestamps), Return(true))); |
| 1194 | 1237 |
| 1195 AutofillChangeList changes; | 1238 AutofillChangeList changes; |
| 1196 changes.push_back(AutofillChange(AutofillChange::UPDATE, | 1239 changes.push_back(AutofillChange(AutofillChange::UPDATE, |
| 1197 updated_entry.key())); | 1240 updated_entry.key())); |
| 1198 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier( | 1241 web_data_service_->OnAutofillEntriesChanged(changes); |
| 1199 db_thread_.DeprecatedGetThreadObject())); | |
| 1200 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, | |
| 1201 content::Source<AutofillWebDataService>( | |
| 1202 web_data_service_.get()), | |
| 1203 content::Details<AutofillChangeList>(&changes)); | |
| 1204 | 1242 |
| 1205 std::vector<AutofillEntry> new_sync_entries; | 1243 std::vector<AutofillEntry> new_sync_entries; |
| 1206 std::vector<AutofillProfile> new_sync_profiles; | 1244 std::vector<AutofillProfile> new_sync_profiles; |
| 1207 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, | 1245 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, |
| 1208 &new_sync_profiles)); | 1246 &new_sync_profiles)); |
| 1209 ASSERT_EQ(1U, new_sync_entries.size()); | 1247 ASSERT_EQ(1U, new_sync_entries.size()); |
| 1210 EXPECT_TRUE(updated_entry == new_sync_entries[0]); | 1248 EXPECT_TRUE(updated_entry == new_sync_entries[0]); |
| 1211 } | 1249 } |
| 1212 | 1250 |
| 1213 | 1251 |
| 1214 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeRemoveEntry) { | 1252 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeRemoveEntry) { |
| 1215 AutofillEntry original_entry(MakeAutofillEntry("my", "entry", 1)); | 1253 AutofillEntry original_entry(MakeAutofillEntry("my", "entry", 1)); |
| 1216 std::vector<AutofillEntry> original_entries; | 1254 std::vector<AutofillEntry> original_entries; |
| 1217 original_entries.push_back(original_entry); | 1255 original_entries.push_back(original_entry); |
| 1218 | 1256 |
| 1219 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). | 1257 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)). |
| 1220 WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true))); | 1258 WillOnce(DoAll(SetArgumentPointee<0>(original_entries), Return(true))); |
| 1221 EXPECT_CALL(*personal_data_manager_, Refresh()); | 1259 EXPECT_CALL(*personal_data_manager_, Refresh()); |
| 1222 CreateRootHelper create_root(this, syncer::AUTOFILL); | 1260 CreateRootHelper create_root(this, syncer::AUTOFILL); |
| 1223 StartSyncService(create_root.callback(), false, syncer::AUTOFILL); | 1261 StartSyncService(create_root.callback(), false, syncer::AUTOFILL); |
| 1224 ASSERT_TRUE(create_root.success()); | 1262 ASSERT_TRUE(create_root.success()); |
| 1225 | 1263 |
| 1226 AutofillChangeList changes; | 1264 AutofillChangeList changes; |
| 1227 changes.push_back(AutofillChange(AutofillChange::REMOVE, | 1265 changes.push_back(AutofillChange(AutofillChange::REMOVE, |
| 1228 original_entry.key())); | 1266 original_entry.key())); |
| 1229 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier( | 1267 web_data_service_->OnAutofillEntriesChanged(changes); |
| 1230 db_thread_.DeprecatedGetThreadObject())); | |
| 1231 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_ENTRIES_CHANGED, | |
| 1232 content::Source<AutofillWebDataService>( | |
| 1233 web_data_service_.get()), | |
| 1234 content::Details<AutofillChangeList>(&changes)); | |
| 1235 | 1268 |
| 1236 std::vector<AutofillEntry> new_sync_entries; | 1269 std::vector<AutofillEntry> new_sync_entries; |
| 1237 std::vector<AutofillProfile> new_sync_profiles; | 1270 std::vector<AutofillProfile> new_sync_profiles; |
| 1238 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, | 1271 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&new_sync_entries, |
| 1239 &new_sync_profiles)); | 1272 &new_sync_profiles)); |
| 1240 ASSERT_EQ(0U, new_sync_entries.size()); | 1273 ASSERT_EQ(0U, new_sync_entries.size()); |
| 1241 } | 1274 } |
| 1242 | 1275 |
| 1243 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeRemoveProfile) { | 1276 TEST_F(ProfileSyncServiceAutofillTest, ProcessUserChangeRemoveProfile) { |
| 1244 AutofillProfile sync_profile; | 1277 AutofillProfile sync_profile; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1257 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)). | 1290 EXPECT_CALL(autofill_table_, GetAutofillProfiles(_)). |
| 1258 WillOnce(DoAll(SetArgumentPointee<0>(native_profiles), Return(true))); | 1291 WillOnce(DoAll(SetArgumentPointee<0>(native_profiles), Return(true))); |
| 1259 | 1292 |
| 1260 std::vector<AutofillProfile> sync_profiles; | 1293 std::vector<AutofillProfile> sync_profiles; |
| 1261 sync_profiles.push_back(sync_profile); | 1294 sync_profiles.push_back(sync_profile); |
| 1262 AddAutofillHelper<AutofillProfile> add_autofill(this, sync_profiles); | 1295 AddAutofillHelper<AutofillProfile> add_autofill(this, sync_profiles); |
| 1263 EXPECT_CALL(*personal_data_manager_, Refresh()); | 1296 EXPECT_CALL(*personal_data_manager_, Refresh()); |
| 1264 StartSyncService(add_autofill.callback(), false, syncer::AUTOFILL_PROFILE); | 1297 StartSyncService(add_autofill.callback(), false, syncer::AUTOFILL_PROFILE); |
| 1265 ASSERT_TRUE(add_autofill.success()); | 1298 ASSERT_TRUE(add_autofill.success()); |
| 1266 | 1299 |
| 1267 AutofillProfileChange change(AutofillProfileChange::REMOVE, | 1300 AutofillProfileChange change( |
| 1268 sync_profile.guid(), NULL); | 1301 AutofillProfileChange::REMOVE, sync_profile.guid(), NULL); |
| 1269 scoped_refptr<ThreadNotifier> notifier(new ThreadNotifier( | 1302 web_data_service_->OnAutofillProfileChanged(change); |
| 1270 db_thread_.DeprecatedGetThreadObject())); | |
| 1271 notifier->Notify(chrome::NOTIFICATION_AUTOFILL_PROFILE_CHANGED, | |
| 1272 content::Source<AutofillWebDataService>( | |
| 1273 web_data_service_.get()), | |
| 1274 content::Details<AutofillProfileChange>(&change)); | |
| 1275 | 1303 |
| 1276 std::vector<AutofillProfile> new_sync_profiles; | 1304 std::vector<AutofillProfile> new_sync_profiles; |
| 1277 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( | 1305 ASSERT_TRUE(GetAutofillProfilesFromSyncDBUnderProfileNode( |
| 1278 &new_sync_profiles)); | 1306 &new_sync_profiles)); |
| 1279 ASSERT_EQ(0U, new_sync_profiles.size()); | 1307 ASSERT_EQ(0U, new_sync_profiles.size()); |
| 1280 } | 1308 } |
| 1281 | 1309 |
| 1282 // http://crbug.com/57884 | 1310 // http://crbug.com/57884 |
| 1283 TEST_F(ProfileSyncServiceAutofillTest, DISABLED_ServerChangeRace) { | 1311 TEST_F(ProfileSyncServiceAutofillTest, DISABLED_ServerChangeRace) { |
| 1284 // Once for MergeDataAndStartSyncing() and twice for ProcessSyncChanges(), via | 1312 // Once for MergeDataAndStartSyncing() and twice for ProcessSyncChanges(), via |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 std::vector<AutofillEntry> sync_entries; | 1348 std::vector<AutofillEntry> sync_entries; |
| 1321 std::vector<AutofillProfile> sync_profiles; | 1349 std::vector<AutofillProfile> sync_profiles; |
| 1322 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); | 1350 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); |
| 1323 EXPECT_EQ(3U, sync_entries.size()); | 1351 EXPECT_EQ(3U, sync_entries.size()); |
| 1324 EXPECT_EQ(0U, sync_profiles.size()); | 1352 EXPECT_EQ(0U, sync_profiles.size()); |
| 1325 for (size_t i = 0; i < sync_entries.size(); i++) { | 1353 for (size_t i = 0; i < sync_entries.size(); i++) { |
| 1326 DVLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() | 1354 DVLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() |
| 1327 << ", " << sync_entries[i].key().value(); | 1355 << ", " << sync_entries[i].key().value(); |
| 1328 } | 1356 } |
| 1329 } | 1357 } |
| OLD | NEW |