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