profile_sync_factory_impl.cc revision dc0f95d653279beabeb9817299e2902918ba123e
1// Copyright (c) 2010 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#include "base/command_line.h" 6#include "chrome/browser/profiles/profile.h" 7#include "chrome/browser/sync/glue/app_data_type_controller.h" 8#include "chrome/browser/sync/glue/autofill_change_processor.h" 9#include "chrome/browser/sync/glue/autofill_data_type_controller.h" 10#include "chrome/browser/sync/glue/autofill_model_associator.h" 11#include "chrome/browser/sync/glue/autofill_profile_change_processor.h" 12#include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h" 13#include "chrome/browser/sync/glue/autofill_profile_model_associator.h" 14#include "chrome/browser/sync/glue/bookmark_change_processor.h" 15#include "chrome/browser/sync/glue/bookmark_data_type_controller.h" 16#include "chrome/browser/sync/glue/bookmark_model_associator.h" 17#include "chrome/browser/sync/glue/data_type_manager_impl.h" 18#include "chrome/browser/sync/glue/data_type_manager_impl2.h" 19#include "chrome/browser/sync/glue/extension_change_processor.h" 20#include "chrome/browser/sync/glue/extension_data_type_controller.h" 21#include "chrome/browser/sync/glue/extension_model_associator.h" 22#include "chrome/browser/sync/glue/extension_sync_traits.h" 23#include "chrome/browser/sync/glue/password_change_processor.h" 24#include "chrome/browser/sync/glue/password_data_type_controller.h" 25#include "chrome/browser/sync/glue/password_model_associator.h" 26#include "chrome/browser/sync/glue/preference_change_processor.h" 27#include "chrome/browser/sync/glue/preference_data_type_controller.h" 28#include "chrome/browser/sync/glue/preference_model_associator.h" 29#include "chrome/browser/sync/glue/session_change_processor.h" 30#include "chrome/browser/sync/glue/session_data_type_controller.h" 31#include "chrome/browser/sync/glue/session_model_associator.h" 32#include "chrome/browser/sync/glue/sync_backend_host.h" 33#include "chrome/browser/sync/glue/theme_change_processor.h" 34#include "chrome/browser/sync/glue/theme_data_type_controller.h" 35#include "chrome/browser/sync/glue/theme_model_associator.h" 36#include "chrome/browser/sync/glue/typed_url_change_processor.h" 37#include "chrome/browser/sync/glue/typed_url_data_type_controller.h" 38#include "chrome/browser/sync/glue/typed_url_model_associator.h" 39#include "chrome/browser/sync/profile_sync_service.h" 40#include "chrome/browser/sync/profile_sync_factory_impl.h" 41#include "chrome/browser/webdata/web_data_service.h" 42#include "chrome/common/chrome_switches.h" 43 44using browser_sync::AppDataTypeController; 45using browser_sync::AutofillChangeProcessor; 46using browser_sync::AutofillProfileChangeProcessor; 47using browser_sync::AutofillDataTypeController; 48using browser_sync::AutofillProfileDataTypeController; 49using browser_sync::AutofillModelAssociator; 50using browser_sync::AutofillProfileModelAssociator; 51using browser_sync::BookmarkChangeProcessor; 52using browser_sync::BookmarkDataTypeController; 53using browser_sync::BookmarkModelAssociator; 54using browser_sync::DataTypeController; 55using browser_sync::DataTypeManager; 56using browser_sync::DataTypeManagerImpl; 57using browser_sync::DataTypeManagerImpl2; 58using browser_sync::ExtensionChangeProcessor; 59using browser_sync::ExtensionDataTypeController; 60using browser_sync::ExtensionModelAssociator; 61using browser_sync::PasswordChangeProcessor; 62using browser_sync::PasswordDataTypeController; 63using browser_sync::PasswordModelAssociator; 64using browser_sync::PreferenceChangeProcessor; 65using browser_sync::PreferenceDataTypeController; 66using browser_sync::PreferenceModelAssociator; 67using browser_sync::SessionChangeProcessor; 68using browser_sync::SessionDataTypeController; 69using browser_sync::SessionModelAssociator; 70using browser_sync::SyncBackendHost; 71using browser_sync::ThemeChangeProcessor; 72using browser_sync::ThemeDataTypeController; 73using browser_sync::ThemeModelAssociator; 74using browser_sync::TypedUrlChangeProcessor; 75using browser_sync::TypedUrlDataTypeController; 76using browser_sync::TypedUrlModelAssociator; 77using browser_sync::UnrecoverableErrorHandler; 78 79ProfileSyncFactoryImpl::ProfileSyncFactoryImpl(Profile* profile, 80 CommandLine* command_line) 81 : profile_(profile), 82 command_line_(command_line) { 83} 84 85ProfileSyncService* ProfileSyncFactoryImpl::CreateProfileSyncService( 86 const std::string& cros_user) { 87 88 ProfileSyncService* pss = new ProfileSyncService( 89 this, profile_, cros_user); 90 91 // App sync is enabled by default. Register unless explicitly 92 // disabled. 93 if (!command_line_->HasSwitch(switches::kDisableSyncApps)) { 94 pss->RegisterDataTypeController( 95 new AppDataTypeController(this, profile_, pss)); 96 } 97 98 // Autofill sync is enabled by default. Register unless explicitly 99 // disabled. 100 if (!command_line_->HasSwitch(switches::kDisableSyncAutofill)) { 101 pss->RegisterDataTypeController( 102 new AutofillDataTypeController(this, profile_, pss)); 103 } 104 105 // Bookmark sync is enabled by default. Register unless explicitly 106 // disabled. 107 if (!command_line_->HasSwitch(switches::kDisableSyncBookmarks)) { 108 pss->RegisterDataTypeController( 109 new BookmarkDataTypeController(this, profile_, pss)); 110 } 111 112 // Extension sync is enabled by default. Register unless explicitly 113 // disabled. 114 if (!command_line_->HasSwitch(switches::kDisableSyncExtensions)) { 115 pss->RegisterDataTypeController( 116 new ExtensionDataTypeController(this, profile_, pss)); 117 } 118 119#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_CHROMEOS) 120 if (command_line_->HasSwitch(switches::kEnableSyncPasswords)) { 121#else 122 // Password sync is enabled by default. Register unless explicitly 123 // disabled. 124 if (!command_line_->HasSwitch(switches::kDisableSyncPasswords)) { 125#endif 126 pss->RegisterDataTypeController( 127 new PasswordDataTypeController(this, profile_, pss)); 128 } 129 130 // Preference sync is enabled by default. Register unless explicitly 131 // disabled. 132 if (!command_line_->HasSwitch(switches::kDisableSyncPreferences)) { 133 pss->RegisterDataTypeController( 134 new PreferenceDataTypeController(this, pss)); 135 } 136 137 // Theme sync is enabled by default. Register unless explicitly disabled. 138 if (!command_line_->HasSwitch(switches::kDisableSyncThemes)) { 139 pss->RegisterDataTypeController( 140 new ThemeDataTypeController(this, profile_, pss)); 141 } 142 143 // TypedUrl sync is disabled by default. Register only if 144 // explicitly enabled. 145 if (command_line_->HasSwitch(switches::kEnableSyncTypedUrls)) { 146 pss->RegisterDataTypeController( 147 new TypedUrlDataTypeController(this, profile_, pss)); 148 } 149 150 // Session sync is disabled by default. Register only if explicitly 151 // enabled. 152 if (command_line_->HasSwitch(switches::kEnableSyncSessions)) { 153 pss->RegisterDataTypeController( 154 new SessionDataTypeController(this, pss)); 155 } 156 157 if (!command_line_->HasSwitch(switches::kDisableSyncAutofillProfile)) { 158 pss->RegisterDataTypeController(new AutofillProfileDataTypeController( 159 this, profile_, pss)); 160 } 161 return pss; 162} 163 164DataTypeManager* ProfileSyncFactoryImpl::CreateDataTypeManager( 165 SyncBackendHost* backend, 166 const DataTypeController::TypeMap& controllers) { 167 if (command_line_->HasSwitch(switches::kNewSyncerThread)) 168 return new DataTypeManagerImpl2(backend, controllers); 169 else 170 return new DataTypeManagerImpl(backend, controllers); 171} 172 173ProfileSyncFactory::SyncComponents 174ProfileSyncFactoryImpl::CreateAppSyncComponents( 175 ProfileSyncService* profile_sync_service, 176 UnrecoverableErrorHandler* error_handler) { 177 browser_sync::ExtensionSyncTraits traits = browser_sync::GetAppSyncTraits(); 178 // For now we simply use extensions sync objects with the app sync 179 // traits. If apps become more than simply extensions, we may have 180 // to write our own apps model associator and/or change processor. 181 ExtensionModelAssociator* model_associator = 182 new ExtensionModelAssociator(traits, profile_sync_service); 183 ExtensionChangeProcessor* change_processor = 184 new ExtensionChangeProcessor(traits, error_handler); 185 return SyncComponents(model_associator, change_processor); 186} 187 188ProfileSyncFactory::SyncComponents 189ProfileSyncFactoryImpl::CreateAutofillSyncComponents( 190 ProfileSyncService* profile_sync_service, 191 WebDatabase* web_database, 192 PersonalDataManager* personal_data, 193 browser_sync::UnrecoverableErrorHandler* error_handler) { 194 195 AutofillModelAssociator* model_associator = 196 new AutofillModelAssociator(profile_sync_service, 197 web_database, 198 personal_data); 199 AutofillChangeProcessor* change_processor = 200 new AutofillChangeProcessor(model_associator, 201 web_database, 202 personal_data, 203 error_handler); 204 return SyncComponents(model_associator, change_processor); 205} 206 207ProfileSyncFactory::SyncComponents 208ProfileSyncFactoryImpl::CreateAutofillProfileSyncComponents( 209 ProfileSyncService* profile_sync_service, 210 WebDatabase* web_database, 211 PersonalDataManager* personal_data, 212 browser_sync::UnrecoverableErrorHandler* error_handler) { 213 214 AutofillProfileModelAssociator* model_associator = 215 new AutofillProfileModelAssociator(profile_sync_service, 216 web_database, 217 personal_data); 218 AutofillProfileChangeProcessor* change_processor = 219 new AutofillProfileChangeProcessor(model_associator, 220 web_database, 221 personal_data, 222 error_handler); 223 return SyncComponents(model_associator, change_processor); 224} 225 226ProfileSyncFactory::SyncComponents 227ProfileSyncFactoryImpl::CreateBookmarkSyncComponents( 228 ProfileSyncService* profile_sync_service, 229 UnrecoverableErrorHandler* error_handler) { 230 BookmarkModelAssociator* model_associator = 231 new BookmarkModelAssociator(profile_sync_service, 232 error_handler); 233 BookmarkChangeProcessor* change_processor = 234 new BookmarkChangeProcessor(model_associator, 235 error_handler); 236 return SyncComponents(model_associator, change_processor); 237} 238 239ProfileSyncFactory::SyncComponents 240ProfileSyncFactoryImpl::CreateExtensionSyncComponents( 241 ProfileSyncService* profile_sync_service, 242 UnrecoverableErrorHandler* error_handler) { 243 browser_sync::ExtensionSyncTraits traits = 244 browser_sync::GetExtensionSyncTraits(); 245 ExtensionModelAssociator* model_associator = 246 new ExtensionModelAssociator(traits, profile_sync_service); 247 ExtensionChangeProcessor* change_processor = 248 new ExtensionChangeProcessor(traits, error_handler); 249 return SyncComponents(model_associator, change_processor); 250} 251 252ProfileSyncFactory::SyncComponents 253ProfileSyncFactoryImpl::CreatePasswordSyncComponents( 254 ProfileSyncService* profile_sync_service, 255 PasswordStore* password_store, 256 UnrecoverableErrorHandler* error_handler) { 257 PasswordModelAssociator* model_associator = 258 new PasswordModelAssociator(profile_sync_service, 259 password_store); 260 PasswordChangeProcessor* change_processor = 261 new PasswordChangeProcessor(model_associator, 262 password_store, 263 error_handler); 264 return SyncComponents(model_associator, change_processor); 265} 266 267ProfileSyncFactory::SyncComponents 268ProfileSyncFactoryImpl::CreatePreferenceSyncComponents( 269 ProfileSyncService* profile_sync_service, 270 UnrecoverableErrorHandler* error_handler) { 271 PreferenceModelAssociator* model_associator = 272 new PreferenceModelAssociator(profile_sync_service); 273 PreferenceChangeProcessor* change_processor = 274 new PreferenceChangeProcessor(model_associator, 275 error_handler); 276 return SyncComponents(model_associator, change_processor); 277} 278 279ProfileSyncFactory::SyncComponents 280ProfileSyncFactoryImpl::CreateThemeSyncComponents( 281 ProfileSyncService* profile_sync_service, 282 UnrecoverableErrorHandler* error_handler) { 283 ThemeModelAssociator* model_associator = 284 new ThemeModelAssociator(profile_sync_service); 285 ThemeChangeProcessor* change_processor = 286 new ThemeChangeProcessor(error_handler); 287 return SyncComponents(model_associator, change_processor); 288} 289 290ProfileSyncFactory::SyncComponents 291ProfileSyncFactoryImpl::CreateTypedUrlSyncComponents( 292 ProfileSyncService* profile_sync_service, 293 history::HistoryBackend* history_backend, 294 browser_sync::UnrecoverableErrorHandler* error_handler) { 295 TypedUrlModelAssociator* model_associator = 296 new TypedUrlModelAssociator(profile_sync_service, 297 history_backend); 298 TypedUrlChangeProcessor* change_processor = 299 new TypedUrlChangeProcessor(model_associator, 300 history_backend, 301 error_handler); 302 return SyncComponents(model_associator, change_processor); 303} 304 305ProfileSyncFactory::SyncComponents 306ProfileSyncFactoryImpl::CreateSessionSyncComponents( 307 ProfileSyncService* profile_sync_service, 308 UnrecoverableErrorHandler* error_handler) { 309 SessionModelAssociator* model_associator = 310 new SessionModelAssociator(profile_sync_service); 311 SessionChangeProcessor* change_processor = 312 new SessionChangeProcessor(error_handler, model_associator); 313 return SyncComponents(model_associator, change_processor); 314} 315