profile_sync_factory_impl.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
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 "base/logging.h" 7#include "chrome/browser/defaults.h" 8#include "chrome/browser/profile.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/bookmark_change_processor.h" 13#include "chrome/browser/sync/glue/bookmark_data_type_controller.h" 14#include "chrome/browser/sync/glue/bookmark_model_associator.h" 15#include "chrome/browser/sync/glue/data_type_manager_impl.h" 16#include "chrome/browser/sync/glue/extension_change_processor.h" 17#include "chrome/browser/sync/glue/extension_data_type_controller.h" 18#include "chrome/browser/sync/glue/extension_model_associator.h" 19#include "chrome/browser/sync/glue/password_change_processor.h" 20#include "chrome/browser/sync/glue/password_data_type_controller.h" 21#include "chrome/browser/sync/glue/password_model_associator.h" 22#include "chrome/browser/sync/glue/preference_change_processor.h" 23#include "chrome/browser/sync/glue/preference_data_type_controller.h" 24#include "chrome/browser/sync/glue/preference_model_associator.h" 25#include "chrome/browser/sync/glue/sync_backend_host.h" 26#include "chrome/browser/sync/glue/theme_change_processor.h" 27#include "chrome/browser/sync/glue/theme_data_type_controller.h" 28#include "chrome/browser/sync/glue/theme_model_associator.h" 29#include "chrome/browser/sync/glue/typed_url_change_processor.h" 30#include "chrome/browser/sync/glue/typed_url_data_type_controller.h" 31#include "chrome/browser/sync/glue/typed_url_model_associator.h" 32#include "chrome/browser/sync/profile_sync_service.h" 33#include "chrome/browser/sync/profile_sync_factory_impl.h" 34#include "chrome/browser/webdata/web_data_service.h" 35#include "chrome/common/chrome_switches.h" 36 37using browser_sync::AutofillChangeProcessor; 38using browser_sync::AutofillDataTypeController; 39using browser_sync::AutofillModelAssociator; 40using browser_sync::BookmarkChangeProcessor; 41using browser_sync::BookmarkDataTypeController; 42using browser_sync::BookmarkModelAssociator; 43using browser_sync::DataTypeController; 44using browser_sync::DataTypeManager; 45using browser_sync::DataTypeManagerImpl; 46using browser_sync::ExtensionChangeProcessor; 47using browser_sync::ExtensionDataTypeController; 48using browser_sync::ExtensionModelAssociator; 49using browser_sync::PasswordChangeProcessor; 50using browser_sync::PasswordDataTypeController; 51using browser_sync::PasswordModelAssociator; 52using browser_sync::PreferenceChangeProcessor; 53using browser_sync::PreferenceDataTypeController; 54using browser_sync::PreferenceModelAssociator; 55using browser_sync::SyncBackendHost; 56using browser_sync::ThemeChangeProcessor; 57using browser_sync::ThemeDataTypeController; 58using browser_sync::ThemeModelAssociator; 59using browser_sync::TypedUrlChangeProcessor; 60using browser_sync::TypedUrlDataTypeController; 61using browser_sync::TypedUrlModelAssociator; 62using browser_sync::UnrecoverableErrorHandler; 63 64ProfileSyncFactoryImpl::ProfileSyncFactoryImpl(Profile* profile, 65 CommandLine* command_line) 66 : profile_(profile), 67 command_line_(command_line) { 68} 69 70ProfileSyncService* ProfileSyncFactoryImpl::CreateProfileSyncService() { 71 ProfileSyncService* pss = new ProfileSyncService( 72 this, profile_, browser_defaults::kBootstrapSyncAuthentication); 73 74 // Autofill sync is enabled by default. Register unless explicitly 75 // disabled. 76 if (!command_line_->HasSwitch(switches::kDisableSyncAutofill)) { 77 pss->RegisterDataTypeController( 78 new AutofillDataTypeController(this, profile_, pss)); 79 } 80 81 // Bookmark sync is enabled by default. Register unless explicitly 82 // disabled. 83 if (!command_line_->HasSwitch(switches::kDisableSyncBookmarks)) { 84 pss->RegisterDataTypeController( 85 new BookmarkDataTypeController(this, profile_, pss)); 86 } 87 88 // Extension sync is enabled by default. Register unless explicitly 89 // disabled. 90 if (!command_line_->HasSwitch(switches::kDisableSyncExtensions)) { 91 pss->RegisterDataTypeController( 92 new ExtensionDataTypeController(this, profile_, pss)); 93 } 94 95 // Password sync is disabled by default. Register only if 96 // explicitly enabled. 97 if (command_line_->HasSwitch(switches::kEnableSyncPasswords)) { 98 pss->RegisterDataTypeController( 99 new PasswordDataTypeController(this, profile_, pss)); 100 } 101 102 // Preference sync is enabled by default. Register unless explicitly 103 // disabled. 104 if (!command_line_->HasSwitch(switches::kDisableSyncPreferences)) { 105 pss->RegisterDataTypeController( 106 new PreferenceDataTypeController(this, pss)); 107 } 108 109 // Theme sync is enabled by default. Register unless explicitly disabled. 110 if (!command_line_->HasSwitch(switches::kDisableSyncThemes)) { 111 pss->RegisterDataTypeController( 112 new ThemeDataTypeController(this, profile_, pss)); 113 } 114 115 // TypedUrl sync is disabled by default. Register only if 116 // explicitly enabled. 117 if (command_line_->HasSwitch(switches::kEnableSyncTypedUrls)) { 118 pss->RegisterDataTypeController( 119 new TypedUrlDataTypeController(this, profile_, pss)); 120 } 121 122 return pss; 123} 124 125DataTypeManager* ProfileSyncFactoryImpl::CreateDataTypeManager( 126 SyncBackendHost* backend, 127 const DataTypeController::TypeMap& controllers) { 128 return new DataTypeManagerImpl(backend, controllers); 129} 130 131ProfileSyncFactory::SyncComponents 132ProfileSyncFactoryImpl::CreateAutofillSyncComponents( 133 ProfileSyncService* profile_sync_service, 134 WebDatabase* web_database, 135 PersonalDataManager* personal_data, 136 browser_sync::UnrecoverableErrorHandler* error_handler) { 137 AutofillModelAssociator* model_associator = 138 new AutofillModelAssociator(profile_sync_service, 139 web_database, 140 personal_data); 141 AutofillChangeProcessor* change_processor = 142 new AutofillChangeProcessor(model_associator, 143 web_database, 144 personal_data, 145 error_handler); 146 return SyncComponents(model_associator, change_processor); 147} 148 149ProfileSyncFactory::SyncComponents 150ProfileSyncFactoryImpl::CreateBookmarkSyncComponents( 151 ProfileSyncService* profile_sync_service, 152 UnrecoverableErrorHandler* error_handler) { 153 BookmarkModelAssociator* model_associator = 154 new BookmarkModelAssociator(profile_sync_service, 155 error_handler); 156 BookmarkChangeProcessor* change_processor = 157 new BookmarkChangeProcessor(model_associator, 158 error_handler); 159 return SyncComponents(model_associator, change_processor); 160} 161 162ProfileSyncFactory::SyncComponents 163ProfileSyncFactoryImpl::CreateExtensionSyncComponents( 164 ProfileSyncService* profile_sync_service, 165 UnrecoverableErrorHandler* error_handler) { 166 ExtensionModelAssociator* model_associator = 167 new ExtensionModelAssociator(profile_sync_service); 168 ExtensionChangeProcessor* change_processor = 169 new ExtensionChangeProcessor(error_handler, model_associator); 170 return SyncComponents(model_associator, change_processor); 171} 172 173ProfileSyncFactory::SyncComponents 174ProfileSyncFactoryImpl::CreatePasswordSyncComponents( 175 ProfileSyncService* profile_sync_service, 176 PasswordStore* password_store, 177 UnrecoverableErrorHandler* error_handler) { 178 PasswordModelAssociator* model_associator = 179 new PasswordModelAssociator(profile_sync_service, 180 password_store); 181 PasswordChangeProcessor* change_processor = 182 new PasswordChangeProcessor(model_associator, 183 password_store, 184 error_handler); 185 return SyncComponents(model_associator, change_processor); 186} 187 188ProfileSyncFactory::SyncComponents 189ProfileSyncFactoryImpl::CreatePreferenceSyncComponents( 190 ProfileSyncService* profile_sync_service, 191 UnrecoverableErrorHandler* error_handler) { 192 PreferenceModelAssociator* model_associator = 193 new PreferenceModelAssociator(profile_sync_service); 194 PreferenceChangeProcessor* change_processor = 195 new PreferenceChangeProcessor(model_associator, 196 error_handler); 197 return SyncComponents(model_associator, change_processor); 198} 199 200ProfileSyncFactory::SyncComponents 201ProfileSyncFactoryImpl::CreateThemeSyncComponents( 202 ProfileSyncService* profile_sync_service, 203 UnrecoverableErrorHandler* error_handler) { 204 ThemeModelAssociator* model_associator = 205 new ThemeModelAssociator(profile_sync_service); 206 ThemeChangeProcessor* change_processor = 207 new ThemeChangeProcessor(error_handler); 208 return SyncComponents(model_associator, change_processor); 209} 210 211ProfileSyncFactory::SyncComponents 212ProfileSyncFactoryImpl::CreateTypedUrlSyncComponents( 213 ProfileSyncService* profile_sync_service, 214 history::HistoryBackend* history_backend, 215 browser_sync::UnrecoverableErrorHandler* error_handler) { 216 TypedUrlModelAssociator* model_associator = 217 new TypedUrlModelAssociator(profile_sync_service, 218 history_backend); 219 TypedUrlChangeProcessor* change_processor = 220 new TypedUrlChangeProcessor(model_associator, 221 history_backend, 222 error_handler); 223 return SyncComponents(model_associator, change_processor); 224} 225