| 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 <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 | 157 |
| 158 class MockAutofillBackend : public autofill::AutofillWebDataBackend { | 158 class MockAutofillBackend : public autofill::AutofillWebDataBackend { |
| 159 public: | 159 public: |
| 160 MockAutofillBackend( | 160 MockAutofillBackend( |
| 161 WebDatabase* web_database, | 161 WebDatabase* web_database, |
| 162 const base::Closure& on_changed) | 162 const base::Closure& on_changed) |
| 163 : web_database_(web_database), | 163 : web_database_(web_database), |
| 164 on_changed_(on_changed) { | 164 on_changed_(on_changed) { |
| 165 } | 165 } |
| 166 | 166 |
| 167 virtual ~MockAutofillBackend() {} | 167 ~MockAutofillBackend() override {} |
| 168 virtual WebDatabase* GetDatabase() override { return web_database_; } | 168 WebDatabase* GetDatabase() override { return web_database_; } |
| 169 virtual void AddObserver( | 169 void AddObserver( |
| 170 autofill::AutofillWebDataServiceObserverOnDBThread* observer) override {} | 170 autofill::AutofillWebDataServiceObserverOnDBThread* observer) override {} |
| 171 virtual void RemoveObserver( | 171 void RemoveObserver( |
| 172 autofill::AutofillWebDataServiceObserverOnDBThread* observer) override {} | 172 autofill::AutofillWebDataServiceObserverOnDBThread* observer) override {} |
| 173 virtual void RemoveExpiredFormElements() override {} | 173 void RemoveExpiredFormElements() override {} |
| 174 virtual void NotifyOfMultipleAutofillChanges() override { | 174 void NotifyOfMultipleAutofillChanges() override { |
| 175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 175 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 176 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, on_changed_); | 176 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, on_changed_); |
| 177 } | 177 } |
| 178 | 178 |
| 179 private: | 179 private: |
| 180 WebDatabase* web_database_; | 180 WebDatabase* web_database_; |
| 181 base::Closure on_changed_; | 181 base::Closure on_changed_; |
| 182 }; | 182 }; |
| 183 | 183 |
| 184 class ProfileSyncServiceAutofillTest; | 184 class ProfileSyncServiceAutofillTest; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 199 } | 199 } |
| 200 | 200 |
| 201 class TokenWebDataServiceFake : public TokenWebData { | 201 class TokenWebDataServiceFake : public TokenWebData { |
| 202 public: | 202 public: |
| 203 TokenWebDataServiceFake() | 203 TokenWebDataServiceFake() |
| 204 : TokenWebData( | 204 : TokenWebData( |
| 205 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), | 205 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
| 206 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)) { | 206 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)) { |
| 207 } | 207 } |
| 208 | 208 |
| 209 virtual bool IsDatabaseLoaded() override { | 209 bool IsDatabaseLoaded() override { return true; } |
| 210 return true; | |
| 211 } | |
| 212 | 210 |
| 213 virtual AutofillWebDataService::Handle GetAllTokens( | 211 AutofillWebDataService::Handle GetAllTokens( |
| 214 WebDataServiceConsumer* consumer) override { | 212 WebDataServiceConsumer* consumer) override { |
| 215 // TODO(tim): It would be nice if WebDataService was injected on | 213 // TODO(tim): It would be nice if WebDataService was injected on |
| 216 // construction of ProfileOAuth2TokenService rather than fetched by | 214 // construction of ProfileOAuth2TokenService rather than fetched by |
| 217 // Initialize so that this isn't necessary (we could pass a NULL service). | 215 // Initialize so that this isn't necessary (we could pass a NULL service). |
| 218 // We currently do return it via EXPECT_CALLs, but without depending on | 216 // We currently do return it via EXPECT_CALLs, but without depending on |
| 219 // order-of-initialization (which seems way more fragile) we can't tell | 217 // order-of-initialization (which seems way more fragile) we can't tell |
| 220 // which component is asking at what time, and some components in these | 218 // which component is asking at what time, and some components in these |
| 221 // Autofill tests require a WebDataService. | 219 // Autofill tests require a WebDataService. |
| 222 return 0; | 220 return 0; |
| 223 } | 221 } |
| 224 | 222 |
| 225 private: | 223 private: |
| 226 virtual ~TokenWebDataServiceFake() {} | 224 ~TokenWebDataServiceFake() override {} |
| 227 | 225 |
| 228 DISALLOW_COPY_AND_ASSIGN(TokenWebDataServiceFake); | 226 DISALLOW_COPY_AND_ASSIGN(TokenWebDataServiceFake); |
| 229 }; | 227 }; |
| 230 | 228 |
| 231 class WebDataServiceFake : public AutofillWebDataService { | 229 class WebDataServiceFake : public AutofillWebDataService { |
| 232 public: | 230 public: |
| 233 WebDataServiceFake() | 231 WebDataServiceFake() |
| 234 : AutofillWebDataService( | 232 : AutofillWebDataService( |
| 235 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), | 233 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
| 236 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)), | 234 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB)), |
| (...skipping 23 matching lines...) Expand all Loading... |
| 260 | 258 |
| 261 void ShutdownSyncableService() { | 259 void ShutdownSyncableService() { |
| 262 // The |autofill_profile_syncable_service_| must be destructed on the DB | 260 // The |autofill_profile_syncable_service_| must be destructed on the DB |
| 263 // thread. | 261 // thread. |
| 264 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, | 262 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, |
| 265 base::Bind(&WebDataServiceFake::DestroySyncableService, | 263 base::Bind(&WebDataServiceFake::DestroySyncableService, |
| 266 base::Unretained(this))); | 264 base::Unretained(this))); |
| 267 syncable_service_created_or_destroyed_.Wait(); | 265 syncable_service_created_or_destroyed_.Wait(); |
| 268 } | 266 } |
| 269 | 267 |
| 270 virtual bool IsDatabaseLoaded() override { | 268 bool IsDatabaseLoaded() override { return true; } |
| 271 return true; | |
| 272 } | |
| 273 | 269 |
| 274 virtual WebDatabase* GetDatabase() override { | 270 WebDatabase* GetDatabase() override { return web_database_; } |
| 275 return web_database_; | |
| 276 } | |
| 277 | 271 |
| 278 void OnAutofillEntriesChanged(const AutofillChangeList& changes) { | 272 void OnAutofillEntriesChanged(const AutofillChangeList& changes) { |
| 279 WaitableEvent event(true, false); | 273 WaitableEvent event(true, false); |
| 280 | 274 |
| 281 base::Closure notify_cb = | 275 base::Closure notify_cb = |
| 282 base::Bind(&AutocompleteSyncableService::AutofillEntriesChanged, | 276 base::Bind(&AutocompleteSyncableService::AutofillEntriesChanged, |
| 283 base::Unretained(autocomplete_syncable_service_), | 277 base::Unretained(autocomplete_syncable_service_), |
| 284 changes); | 278 changes); |
| 285 BrowserThread::PostTask( | 279 BrowserThread::PostTask( |
| 286 BrowserThread::DB, | 280 BrowserThread::DB, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 297 base::Unretained(autofill_profile_syncable_service_), | 291 base::Unretained(autofill_profile_syncable_service_), |
| 298 changes); | 292 changes); |
| 299 BrowserThread::PostTask( | 293 BrowserThread::PostTask( |
| 300 BrowserThread::DB, | 294 BrowserThread::DB, |
| 301 FROM_HERE, | 295 FROM_HERE, |
| 302 base::Bind(&RunAndSignal, notify_cb, &event)); | 296 base::Bind(&RunAndSignal, notify_cb, &event)); |
| 303 event.Wait(); | 297 event.Wait(); |
| 304 } | 298 } |
| 305 | 299 |
| 306 private: | 300 private: |
| 307 virtual ~WebDataServiceFake() {} | 301 ~WebDataServiceFake() override {} |
| 308 | 302 |
| 309 void CreateSyncableService(const base::Closure& on_changed_callback) { | 303 void CreateSyncableService(const base::Closure& on_changed_callback) { |
| 310 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); | 304 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); |
| 311 // These services are deleted in DestroySyncableService(). | 305 // These services are deleted in DestroySyncableService(). |
| 312 backend_.reset(new MockAutofillBackend( | 306 backend_.reset(new MockAutofillBackend( |
| 313 GetDatabase(), on_changed_callback)); | 307 GetDatabase(), on_changed_callback)); |
| 314 AutocompleteSyncableService::CreateForWebDataServiceAndBackend( | 308 AutocompleteSyncableService::CreateForWebDataServiceAndBackend( |
| 315 this, backend_.get()); | 309 this, backend_.get()); |
| 316 AutofillProfileSyncableService::CreateForWebDataServiceAndBackend( | 310 AutofillProfileSyncableService::CreateForWebDataServiceAndBackend( |
| 317 this, backend_.get(), "en-US"); | 311 this, backend_.get(), "en-US"); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 ProfileSyncService* service) = 0; | 374 ProfileSyncService* service) = 0; |
| 381 virtual void SetExpectation(ProfileSyncComponentsFactoryMock* factory, | 375 virtual void SetExpectation(ProfileSyncComponentsFactoryMock* factory, |
| 382 ProfileSyncService* service, | 376 ProfileSyncService* service, |
| 383 AutofillWebDataService* wds, | 377 AutofillWebDataService* wds, |
| 384 DataTypeController* dtc) = 0; | 378 DataTypeController* dtc) = 0; |
| 385 virtual ~AbstractAutofillFactory() {} | 379 virtual ~AbstractAutofillFactory() {} |
| 386 }; | 380 }; |
| 387 | 381 |
| 388 class AutofillEntryFactory : public AbstractAutofillFactory { | 382 class AutofillEntryFactory : public AbstractAutofillFactory { |
| 389 public: | 383 public: |
| 390 virtual DataTypeController* CreateDataTypeController( | 384 DataTypeController* CreateDataTypeController( |
| 391 ProfileSyncComponentsFactory* factory, | 385 ProfileSyncComponentsFactory* factory, |
| 392 TestingProfile* profile, | 386 TestingProfile* profile, |
| 393 ProfileSyncService* service) override { | 387 ProfileSyncService* service) override { |
| 394 return new AutofillDataTypeController(factory, profile); | 388 return new AutofillDataTypeController(factory, profile); |
| 395 } | 389 } |
| 396 | 390 |
| 397 virtual void SetExpectation(ProfileSyncComponentsFactoryMock* factory, | 391 void SetExpectation(ProfileSyncComponentsFactoryMock* factory, |
| 398 ProfileSyncService* service, | 392 ProfileSyncService* service, |
| 399 AutofillWebDataService* wds, | 393 AutofillWebDataService* wds, |
| 400 DataTypeController* dtc) override { | 394 DataTypeController* dtc) override { |
| 401 EXPECT_CALL(*factory, GetSyncableServiceForType(syncer::AUTOFILL)). | 395 EXPECT_CALL(*factory, GetSyncableServiceForType(syncer::AUTOFILL)). |
| 402 WillOnce(MakeAutocompleteSyncComponents(wds)); | 396 WillOnce(MakeAutocompleteSyncComponents(wds)); |
| 403 } | 397 } |
| 404 }; | 398 }; |
| 405 | 399 |
| 406 class AutofillProfileFactory : public AbstractAutofillFactory { | 400 class AutofillProfileFactory : public AbstractAutofillFactory { |
| 407 public: | 401 public: |
| 408 virtual DataTypeController* CreateDataTypeController( | 402 DataTypeController* CreateDataTypeController( |
| 409 ProfileSyncComponentsFactory* factory, | 403 ProfileSyncComponentsFactory* factory, |
| 410 TestingProfile* profile, | 404 TestingProfile* profile, |
| 411 ProfileSyncService* service) override { | 405 ProfileSyncService* service) override { |
| 412 return new AutofillProfileDataTypeController(factory, profile); | 406 return new AutofillProfileDataTypeController(factory, profile); |
| 413 } | 407 } |
| 414 | 408 |
| 415 virtual void SetExpectation(ProfileSyncComponentsFactoryMock* factory, | 409 void SetExpectation(ProfileSyncComponentsFactoryMock* factory, |
| 416 ProfileSyncService* service, | 410 ProfileSyncService* service, |
| 417 AutofillWebDataService* wds, | 411 AutofillWebDataService* wds, |
| 418 DataTypeController* dtc) override { | 412 DataTypeController* dtc) override { |
| 419 EXPECT_CALL(*factory, | 413 EXPECT_CALL(*factory, |
| 420 GetSyncableServiceForType(syncer::AUTOFILL_PROFILE)). | 414 GetSyncableServiceForType(syncer::AUTOFILL_PROFILE)). |
| 421 WillOnce(MakeAutofillProfileSyncComponents(wds)); | 415 WillOnce(MakeAutofillProfileSyncComponents(wds)); |
| 422 } | 416 } |
| 423 }; | 417 }; |
| 424 | 418 |
| 425 class MockPersonalDataManager : public PersonalDataManager { | 419 class MockPersonalDataManager : public PersonalDataManager { |
| 426 public: | 420 public: |
| 427 MockPersonalDataManager() : PersonalDataManager("en-US") {} | 421 MockPersonalDataManager() : PersonalDataManager("en-US") {} |
| 428 MOCK_CONST_METHOD0(IsDataLoaded, bool()); | 422 MOCK_CONST_METHOD0(IsDataLoaded, bool()); |
| 429 MOCK_METHOD0(LoadProfiles, void()); | 423 MOCK_METHOD0(LoadProfiles, void()); |
| 430 MOCK_METHOD0(LoadCreditCards, void()); | 424 MOCK_METHOD0(LoadCreditCards, void()); |
| 431 MOCK_METHOD0(Refresh, void()); | 425 MOCK_METHOD0(Refresh, void()); |
| 432 | 426 |
| 433 static KeyedService* Build(content::BrowserContext* profile) { | 427 static KeyedService* Build(content::BrowserContext* profile) { |
| 434 return new MockPersonalDataManager(); | 428 return new MockPersonalDataManager(); |
| 435 } | 429 } |
| 436 }; | 430 }; |
| 437 | 431 |
| 438 template <class T> class AddAutofillHelper; | 432 template <class T> class AddAutofillHelper; |
| 439 | 433 |
| 440 class ProfileSyncServiceAutofillTest | 434 class ProfileSyncServiceAutofillTest |
| 441 : public AbstractProfileSyncServiceTest, | 435 : public AbstractProfileSyncServiceTest, |
| 442 public syncer::DataTypeDebugInfoListener { | 436 public syncer::DataTypeDebugInfoListener { |
| 443 public: | 437 public: |
| 444 // DataTypeDebugInfoListener implementation. | 438 // DataTypeDebugInfoListener implementation. |
| 445 virtual void OnDataTypeConfigureComplete( | 439 void OnDataTypeConfigureComplete(const std::vector< |
| 446 const std::vector<syncer::DataTypeConfigurationStats>& | 440 syncer::DataTypeConfigurationStats>& configuration_stats) override { |
| 447 configuration_stats) override { | |
| 448 ASSERT_EQ(1u, configuration_stats.size()); | 441 ASSERT_EQ(1u, configuration_stats.size()); |
| 449 association_stats_ = configuration_stats[0].association_stats; | 442 association_stats_ = configuration_stats[0].association_stats; |
| 450 } | 443 } |
| 451 | 444 |
| 452 protected: | 445 protected: |
| 453 ProfileSyncServiceAutofillTest() | 446 ProfileSyncServiceAutofillTest() |
| 454 : profile_manager_(TestingBrowserProcess::GetGlobal()), | 447 : profile_manager_(TestingBrowserProcess::GetGlobal()), |
| 455 debug_ptr_factory_(this) { | 448 debug_ptr_factory_(this) { |
| 456 } | 449 } |
| 457 virtual ~ProfileSyncServiceAutofillTest() { | 450 virtual ~ProfileSyncServiceAutofillTest() { |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 // Overload write transaction to use custom NotifyTransactionComplete | 766 // Overload write transaction to use custom NotifyTransactionComplete |
| 774 class WriteTransactionTest: public WriteTransaction { | 767 class WriteTransactionTest: public WriteTransaction { |
| 775 public: | 768 public: |
| 776 WriteTransactionTest(const tracked_objects::Location& from_here, | 769 WriteTransactionTest(const tracked_objects::Location& from_here, |
| 777 WriterTag writer, | 770 WriterTag writer, |
| 778 syncer::syncable::Directory* directory, | 771 syncer::syncable::Directory* directory, |
| 779 scoped_ptr<WaitableEvent>* wait_for_syncapi) | 772 scoped_ptr<WaitableEvent>* wait_for_syncapi) |
| 780 : WriteTransaction(from_here, writer, directory), | 773 : WriteTransaction(from_here, writer, directory), |
| 781 wait_for_syncapi_(wait_for_syncapi) { } | 774 wait_for_syncapi_(wait_for_syncapi) { } |
| 782 | 775 |
| 783 virtual void NotifyTransactionComplete( | 776 void NotifyTransactionComplete(syncer::ModelTypeSet types) override { |
| 784 syncer::ModelTypeSet types) override { | |
| 785 // This is where we differ. Force a thread change here, giving another | 777 // This is where we differ. Force a thread change here, giving another |
| 786 // thread a chance to create a WriteTransaction | 778 // thread a chance to create a WriteTransaction |
| 787 (*wait_for_syncapi_)->Wait(); | 779 (*wait_for_syncapi_)->Wait(); |
| 788 | 780 |
| 789 WriteTransaction::NotifyTransactionComplete(types); | 781 WriteTransaction::NotifyTransactionComplete(types); |
| 790 } | 782 } |
| 791 | 783 |
| 792 private: | 784 private: |
| 793 scoped_ptr<WaitableEvent>* wait_for_syncapi_; | 785 scoped_ptr<WaitableEvent>* wait_for_syncapi_; |
| 794 }; | 786 }; |
| (...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1380 std::vector<AutofillEntry> sync_entries; | 1372 std::vector<AutofillEntry> sync_entries; |
| 1381 std::vector<AutofillProfile> sync_profiles; | 1373 std::vector<AutofillProfile> sync_profiles; |
| 1382 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); | 1374 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); |
| 1383 EXPECT_EQ(3U, sync_entries.size()); | 1375 EXPECT_EQ(3U, sync_entries.size()); |
| 1384 EXPECT_EQ(0U, sync_profiles.size()); | 1376 EXPECT_EQ(0U, sync_profiles.size()); |
| 1385 for (size_t i = 0; i < sync_entries.size(); i++) { | 1377 for (size_t i = 0; i < sync_entries.size(); i++) { |
| 1386 DVLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() | 1378 DVLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() |
| 1387 << ", " << sync_entries[i].key().value(); | 1379 << ", " << sync_entries[i].key().value(); |
| 1388 } | 1380 } |
| 1389 } | 1381 } |
| OLD | NEW |