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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ 6 #define CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ 7 8 #include <string> 9 10 #include "base/callback.h" 11 #include "base/compiler_specific.h" 12 #include "base/memory/weak_ptr.h" 13 #include "chrome/browser/sync/glue/sync_backend_host_impl.h" 14 #include "chrome/browser/sync/profile_sync_service.h" 15 #include "components/signin/core/browser/profile_oauth2_token_service.h" 16 #include "components/sync_driver/data_type_manager_impl.h" 17 #include "components/sync_driver/sync_prefs.h" 18 #include "sync/test/engine/test_id_factory.h" 19 #include "testing/gmock/include/gmock/gmock.h" 20 21 class Profile; 22 class ProfileOAuth2TokenService; 23 class ProfileSyncComponentsFactory; 24 class ProfileSyncComponentsFactoryMock; 25 26 ACTION(ReturnNewDataTypeManager) { 27 return new browser_sync::DataTypeManagerImpl(base::Closure(), 28 arg0, 29 arg1, 30 arg2, 31 arg3, 32 arg4, 33 arg5); 34 } 35 36 namespace browser_sync { 37 38 class SyncBackendHostForProfileSyncTest : public SyncBackendHostImpl { 39 public: 40 SyncBackendHostForProfileSyncTest( 41 Profile* profile, 42 invalidation::InvalidationService* invalidator, 43 const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs, 44 base::Closure callback); 45 virtual ~SyncBackendHostForProfileSyncTest(); 46 47 virtual void RequestConfigureSyncer( 48 syncer::ConfigureReason reason, 49 syncer::ModelTypeSet to_download, 50 syncer::ModelTypeSet to_purge, 51 syncer::ModelTypeSet to_journal, 52 syncer::ModelTypeSet to_unapply, 53 syncer::ModelTypeSet to_ignore, 54 const syncer::ModelSafeRoutingInfo& routing_info, 55 const base::Callback<void(syncer::ModelTypeSet, 56 syncer::ModelTypeSet)>& ready_task, 57 const base::Closure& retry_callback) OVERRIDE; 58 59 protected: 60 virtual void InitCore(scoped_ptr<DoInitializeOptions> options) OVERRIDE; 61 62 private: 63 // Invoked at the start of HandleSyncManagerInitializationOnFrontendLoop. 64 // Allows extra initialization work to be performed before the backend comes 65 // up. 66 base::Closure callback_; 67 }; 68 69 } // namespace browser_sync 70 71 class TestProfileSyncService : public ProfileSyncService { 72 public: 73 // TODO(tim): Add ability to inject TokenService alongside SigninManager. 74 // TODO(rogerta): what does above comment mean? 75 TestProfileSyncService( 76 ProfileSyncComponentsFactory* factory, 77 Profile* profile, 78 SigninManagerBase* signin, 79 ProfileOAuth2TokenService* oauth2_token_service, 80 browser_sync::ProfileSyncServiceStartBehavior behavior); 81 82 virtual ~TestProfileSyncService(); 83 84 virtual void OnConfigureDone( 85 const browser_sync::DataTypeManager::ConfigureResult& result) OVERRIDE; 86 87 // We implement our own version to avoid some DCHECKs. 88 virtual syncer::UserShare* GetUserShare() const OVERRIDE; 89 90 static TestProfileSyncService* BuildAutoStartAsyncInit( 91 Profile* profile, base::Closure callback); 92 93 ProfileSyncComponentsFactoryMock* components_factory_mock(); 94 95 syncer::TestIdFactory* id_factory(); 96 97 // Raise visibility to ease testing. 98 using ProfileSyncService::NotifyObservers; 99 100 protected: 101 static KeyedService* TestFactoryFunction(content::BrowserContext* profile); 102 103 // Return NULL handle to use in backend initialization to avoid receiving 104 // js messages on UI loop when it's being destroyed, which are not deleted 105 // and cause memory leak in test. 106 virtual syncer::WeakHandle<syncer::JsEventHandler> GetJsEventHandler() 107 OVERRIDE; 108 109 private: 110 syncer::TestIdFactory id_factory_; 111 }; 112 113 #endif // CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_ 114