OLD | NEW |
| (Empty) |
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/app_notification_manager.h" | |
7 #include "chrome/browser/extensions/extension_service.h" | |
8 #include "chrome/browser/extensions/settings/settings_backend.h" | |
9 #include "chrome/browser/prefs/pref_model_associator.h" | |
10 #include "chrome/browser/profiles/profile.h" | |
11 #include "chrome/browser/search_engines/template_url_service.h" | |
12 #include "chrome/browser/search_engines/template_url_service_factory.h" | |
13 #include "chrome/browser/sync/api/syncable_service.h" | |
14 #include "chrome/browser/sync/glue/app_data_type_controller.h" | |
15 #include "chrome/browser/sync/glue/app_notification_data_type_controller.h" | |
16 #include "chrome/browser/sync/glue/autofill_data_type_controller.h" | |
17 #include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h" | |
18 #include "chrome/browser/sync/glue/bookmark_change_processor.h" | |
19 #include "chrome/browser/sync/glue/bookmark_data_type_controller.h" | |
20 #include "chrome/browser/sync/glue/bookmark_model_associator.h" | |
21 #include "chrome/browser/sync/glue/data_type_manager_impl.h" | |
22 #include "chrome/browser/sync/glue/extension_data_type_controller.h" | |
23 #include "chrome/browser/sync/glue/extension_setting_data_type_controller.h" | |
24 #include "chrome/browser/sync/glue/generic_change_processor.h" | |
25 #include "chrome/browser/sync/glue/password_change_processor.h" | |
26 #include "chrome/browser/sync/glue/password_data_type_controller.h" | |
27 #include "chrome/browser/sync/glue/password_model_associator.h" | |
28 #include "chrome/browser/sync/glue/preference_data_type_controller.h" | |
29 #include "chrome/browser/sync/glue/search_engine_data_type_controller.h" | |
30 #include "chrome/browser/sync/glue/session_change_processor.h" | |
31 #include "chrome/browser/sync/glue/session_data_type_controller.h" | |
32 #include "chrome/browser/sync/glue/session_model_associator.h" | |
33 #include "chrome/browser/sync/glue/shared_change_processor.h" | |
34 #include "chrome/browser/sync/glue/sync_backend_host.h" | |
35 #include "chrome/browser/sync/glue/syncable_service_adapter.h" | |
36 #include "chrome/browser/sync/glue/theme_change_processor.h" | |
37 #include "chrome/browser/sync/glue/theme_data_type_controller.h" | |
38 #include "chrome/browser/sync/glue/theme_model_associator.h" | |
39 #include "chrome/browser/sync/glue/typed_url_change_processor.h" | |
40 #include "chrome/browser/sync/glue/typed_url_data_type_controller.h" | |
41 #include "chrome/browser/sync/glue/typed_url_model_associator.h" | |
42 #include "chrome/browser/sync/profile_sync_factory_impl.h" | |
43 #include "chrome/browser/sync/profile_sync_service.h" | |
44 #include "chrome/browser/sync/signin_manager.h" | |
45 #include "chrome/browser/webdata/autocomplete_syncable_service.h" | |
46 #include "chrome/browser/webdata/autofill_profile_syncable_service.h" | |
47 #include "chrome/browser/webdata/web_data_service.h" | |
48 #include "chrome/common/chrome_switches.h" | |
49 #include "chrome/common/pref_names.h" | |
50 #include "content/public/browser/browser_thread.h" | |
51 | |
52 using browser_sync::AppDataTypeController; | |
53 using browser_sync::AppNotificationDataTypeController; | |
54 using browser_sync::AutofillDataTypeController; | |
55 using browser_sync::AutofillProfileDataTypeController; | |
56 using browser_sync::BookmarkChangeProcessor; | |
57 using browser_sync::BookmarkDataTypeController; | |
58 using browser_sync::BookmarkModelAssociator; | |
59 using browser_sync::DataTypeController; | |
60 using browser_sync::DataTypeManager; | |
61 using browser_sync::DataTypeManagerImpl; | |
62 using browser_sync::ExtensionDataTypeController; | |
63 using browser_sync::ExtensionSettingDataTypeController; | |
64 using browser_sync::GenericChangeProcessor; | |
65 using browser_sync::PasswordChangeProcessor; | |
66 using browser_sync::PasswordDataTypeController; | |
67 using browser_sync::PasswordModelAssociator; | |
68 using browser_sync::PreferenceDataTypeController; | |
69 using browser_sync::SearchEngineDataTypeController; | |
70 using browser_sync::SessionChangeProcessor; | |
71 using browser_sync::SessionDataTypeController; | |
72 using browser_sync::SessionModelAssociator; | |
73 using browser_sync::SharedChangeProcessor; | |
74 using browser_sync::SyncableServiceAdapter; | |
75 using browser_sync::SyncBackendHost; | |
76 using browser_sync::ThemeChangeProcessor; | |
77 using browser_sync::ThemeDataTypeController; | |
78 using browser_sync::ThemeModelAssociator; | |
79 using browser_sync::TypedUrlChangeProcessor; | |
80 using browser_sync::TypedUrlDataTypeController; | |
81 using browser_sync::TypedUrlModelAssociator; | |
82 using browser_sync::UnrecoverableErrorHandler; | |
83 using content::BrowserThread; | |
84 | |
85 ProfileSyncFactoryImpl::ProfileSyncFactoryImpl(Profile* profile, | |
86 CommandLine* command_line) | |
87 : profile_(profile), | |
88 command_line_(command_line) { | |
89 } | |
90 | |
91 ProfileSyncService* ProfileSyncFactoryImpl::CreateProfileSyncService( | |
92 const std::string& cros_user) { | |
93 | |
94 ProfileSyncService* pss = new ProfileSyncService( | |
95 this, profile_, new SigninManager(), cros_user); | |
96 return pss; | |
97 } | |
98 | |
99 void ProfileSyncFactoryImpl::RegisterDataTypes(ProfileSyncService* pss) { | |
100 // App sync is enabled by default. Register unless explicitly | |
101 // disabled. | |
102 if (!command_line_->HasSwitch(switches::kDisableSyncApps)) { | |
103 pss->RegisterDataTypeController( | |
104 new AppDataTypeController(this, profile_, pss)); | |
105 } | |
106 | |
107 // Autofill sync is enabled by default. Register unless explicitly | |
108 // disabled. | |
109 if (!command_line_->HasSwitch(switches::kDisableSyncAutofill)) { | |
110 pss->RegisterDataTypeController( | |
111 new AutofillDataTypeController(this, profile_)); | |
112 } | |
113 | |
114 // Bookmark sync is enabled by default. Register unless explicitly | |
115 // disabled. | |
116 if (!command_line_->HasSwitch(switches::kDisableSyncBookmarks)) { | |
117 pss->RegisterDataTypeController( | |
118 new BookmarkDataTypeController(this, profile_, pss)); | |
119 } | |
120 | |
121 // Extension sync is enabled by default. Register unless explicitly | |
122 // disabled. | |
123 if (!command_line_->HasSwitch(switches::kDisableSyncExtensions)) { | |
124 pss->RegisterDataTypeController( | |
125 new ExtensionDataTypeController(this, profile_, pss)); | |
126 } | |
127 | |
128 // Password sync is enabled by default. Register unless explicitly | |
129 // disabled. | |
130 if (!command_line_->HasSwitch(switches::kDisableSyncPasswords)) { | |
131 pss->RegisterDataTypeController( | |
132 new PasswordDataTypeController(this, profile_)); | |
133 } | |
134 | |
135 // Preference sync is enabled by default. Register unless explicitly | |
136 // disabled. | |
137 if (!command_line_->HasSwitch(switches::kDisableSyncPreferences)) { | |
138 pss->RegisterDataTypeController( | |
139 new PreferenceDataTypeController(this, profile_, pss)); | |
140 } | |
141 | |
142 // Theme sync is enabled by default. Register unless explicitly disabled. | |
143 if (!command_line_->HasSwitch(switches::kDisableSyncThemes)) { | |
144 pss->RegisterDataTypeController( | |
145 new ThemeDataTypeController(this, profile_, pss)); | |
146 } | |
147 | |
148 // TypedUrl sync is enabled by default. Register unless explicitly disabled, | |
149 // or if saving history is disabled. | |
150 if (!profile_->GetPrefs()->GetBoolean(prefs::kSavingBrowserHistoryDisabled) && | |
151 !command_line_->HasSwitch(switches::kDisableSyncTypedUrls)) { | |
152 pss->RegisterDataTypeController( | |
153 new TypedUrlDataTypeController(this, profile_)); | |
154 } | |
155 | |
156 // Search Engine sync is enabled by default. Register only if explicitly | |
157 // disabled. | |
158 if (!command_line_->HasSwitch(switches::kDisableSyncSearchEngines)) { | |
159 pss->RegisterDataTypeController( | |
160 new SearchEngineDataTypeController(this, profile_, pss)); | |
161 } | |
162 | |
163 // Session sync is disabled by default. Register only if explicitly | |
164 // enabled. | |
165 if (command_line_->HasSwitch(switches::kEnableSyncTabs)) { | |
166 pss->RegisterDataTypeController( | |
167 new SessionDataTypeController(this, profile_, pss)); | |
168 } | |
169 | |
170 // Extension setting sync is disabled by default. Register only if | |
171 // explicitly enabled. | |
172 if (command_line_->HasSwitch(switches::kEnableSyncExtensionSettings)) { | |
173 pss->RegisterDataTypeController( | |
174 new ExtensionSettingDataTypeController( | |
175 syncable::EXTENSION_SETTINGS, this, profile_, pss)); | |
176 pss->RegisterDataTypeController( | |
177 new ExtensionSettingDataTypeController( | |
178 syncable::APP_SETTINGS, this, profile_, pss)); | |
179 } | |
180 | |
181 if (!command_line_->HasSwitch(switches::kDisableSyncAutofillProfile)) { | |
182 pss->RegisterDataTypeController( | |
183 new AutofillProfileDataTypeController(this, profile_)); | |
184 } | |
185 | |
186 // App notifications sync is enabled by default. Register only if | |
187 // explicitly disabled. | |
188 if (!command_line_->HasSwitch(switches::kDisableSyncAppNotifications)) { | |
189 pss->RegisterDataTypeController( | |
190 new AppNotificationDataTypeController(this, profile_, pss)); | |
191 } | |
192 } | |
193 | |
194 DataTypeManager* ProfileSyncFactoryImpl::CreateDataTypeManager( | |
195 SyncBackendHost* backend, | |
196 const DataTypeController::TypeMap* controllers) { | |
197 return new DataTypeManagerImpl(backend, controllers); | |
198 } | |
199 | |
200 browser_sync::GenericChangeProcessor* | |
201 ProfileSyncFactoryImpl::CreateGenericChangeProcessor( | |
202 ProfileSyncService* profile_sync_service, | |
203 browser_sync::UnrecoverableErrorHandler* error_handler, | |
204 const base::WeakPtr<SyncableService>& local_service) { | |
205 sync_api::UserShare* user_share = profile_sync_service->GetUserShare(); | |
206 return new GenericChangeProcessor(error_handler, | |
207 local_service, | |
208 user_share); | |
209 } | |
210 | |
211 browser_sync::SharedChangeProcessor* ProfileSyncFactoryImpl:: | |
212 CreateSharedChangeProcessor() { | |
213 return new SharedChangeProcessor(); | |
214 } | |
215 | |
216 ProfileSyncFactory::SyncComponents | |
217 ProfileSyncFactoryImpl::CreateAppSyncComponents( | |
218 ProfileSyncService* profile_sync_service, | |
219 UnrecoverableErrorHandler* error_handler) { | |
220 base::WeakPtr<SyncableService> app_sync_service = | |
221 profile_sync_service->profile()->GetExtensionService()->AsWeakPtr(); | |
222 sync_api::UserShare* user_share = profile_sync_service->GetUserShare(); | |
223 GenericChangeProcessor* change_processor = | |
224 new GenericChangeProcessor(error_handler, app_sync_service, user_share); | |
225 browser_sync::SyncableServiceAdapter* sync_service_adapter = | |
226 new browser_sync::SyncableServiceAdapter(syncable::APPS, | |
227 app_sync_service, | |
228 change_processor); | |
229 return SyncComponents(sync_service_adapter, change_processor); | |
230 } | |
231 | |
232 base::WeakPtr<SyncableService> | |
233 ProfileSyncFactoryImpl::GetAutofillProfileSyncableService( | |
234 WebDataService* web_data_service) const { | |
235 return web_data_service->GetAutofillProfileSyncableService()->AsWeakPtr(); | |
236 } | |
237 | |
238 base::WeakPtr<SyncableService> | |
239 ProfileSyncFactoryImpl::GetAutocompleteSyncableService( | |
240 WebDataService* web_data_service) const { | |
241 return web_data_service->GetAutocompleteSyncableService()->AsWeakPtr(); | |
242 } | |
243 | |
244 ProfileSyncFactory::SyncComponents | |
245 ProfileSyncFactoryImpl::CreateBookmarkSyncComponents( | |
246 ProfileSyncService* profile_sync_service, | |
247 UnrecoverableErrorHandler* error_handler) { | |
248 BookmarkModel* bookmark_model = | |
249 profile_sync_service->profile()->GetBookmarkModel(); | |
250 sync_api::UserShare* user_share = profile_sync_service->GetUserShare(); | |
251 BookmarkModelAssociator* model_associator = | |
252 new BookmarkModelAssociator(bookmark_model, | |
253 user_share, | |
254 error_handler); | |
255 BookmarkChangeProcessor* change_processor = | |
256 new BookmarkChangeProcessor(model_associator, | |
257 error_handler); | |
258 return SyncComponents(model_associator, change_processor); | |
259 } | |
260 | |
261 ProfileSyncFactory::SyncComponents | |
262 ProfileSyncFactoryImpl::CreateExtensionOrAppSettingSyncComponents( | |
263 syncable::ModelType type, | |
264 SyncableService* settings_service, | |
265 ProfileSyncService* profile_sync_service, | |
266 UnrecoverableErrorHandler* error_handler) { | |
267 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | |
268 DCHECK(type == syncable::EXTENSION_SETTINGS || | |
269 type == syncable::APP_SETTINGS); | |
270 sync_api::UserShare* user_share = profile_sync_service->GetUserShare(); | |
271 GenericChangeProcessor* change_processor = | |
272 new GenericChangeProcessor(error_handler, | |
273 settings_service->AsWeakPtr(), | |
274 user_share); | |
275 browser_sync::SyncableServiceAdapter* sync_service_adapter = | |
276 new browser_sync::SyncableServiceAdapter(type, | |
277 settings_service, | |
278 change_processor); | |
279 return SyncComponents(sync_service_adapter, change_processor); | |
280 } | |
281 | |
282 ProfileSyncFactory::SyncComponents | |
283 ProfileSyncFactoryImpl::CreateExtensionSyncComponents( | |
284 ProfileSyncService* profile_sync_service, | |
285 UnrecoverableErrorHandler* error_handler) { | |
286 base::WeakPtr<SyncableService> extension_sync_service = | |
287 profile_sync_service->profile()->GetExtensionService()->AsWeakPtr(); | |
288 sync_api::UserShare* user_share = profile_sync_service->GetUserShare(); | |
289 GenericChangeProcessor* change_processor = | |
290 new GenericChangeProcessor(error_handler, | |
291 extension_sync_service, | |
292 user_share); | |
293 browser_sync::SyncableServiceAdapter* sync_service_adapter = | |
294 new browser_sync::SyncableServiceAdapter(syncable::EXTENSIONS, | |
295 extension_sync_service, | |
296 change_processor); | |
297 return SyncComponents(sync_service_adapter, change_processor); | |
298 } | |
299 | |
300 ProfileSyncFactory::SyncComponents | |
301 ProfileSyncFactoryImpl::CreatePasswordSyncComponents( | |
302 ProfileSyncService* profile_sync_service, | |
303 PasswordStore* password_store, | |
304 UnrecoverableErrorHandler* error_handler) { | |
305 PasswordModelAssociator* model_associator = | |
306 new PasswordModelAssociator(profile_sync_service, | |
307 password_store); | |
308 PasswordChangeProcessor* change_processor = | |
309 new PasswordChangeProcessor(model_associator, | |
310 password_store, | |
311 error_handler); | |
312 return SyncComponents(model_associator, change_processor); | |
313 } | |
314 | |
315 ProfileSyncFactory::SyncComponents | |
316 ProfileSyncFactoryImpl::CreatePreferenceSyncComponents( | |
317 ProfileSyncService* profile_sync_service, | |
318 UnrecoverableErrorHandler* error_handler) { | |
319 base::WeakPtr<SyncableService> pref_sync_service = | |
320 profile_->GetPrefs()->GetSyncableService()->AsWeakPtr(); | |
321 sync_api::UserShare* user_share = profile_sync_service->GetUserShare(); | |
322 GenericChangeProcessor* change_processor = | |
323 new GenericChangeProcessor(error_handler, | |
324 pref_sync_service, | |
325 user_share); | |
326 SyncableServiceAdapter* sync_service_adapter = | |
327 new SyncableServiceAdapter(syncable::PREFERENCES, | |
328 pref_sync_service, | |
329 change_processor); | |
330 return SyncComponents(sync_service_adapter, change_processor); | |
331 } | |
332 | |
333 ProfileSyncFactory::SyncComponents | |
334 ProfileSyncFactoryImpl::CreateThemeSyncComponents( | |
335 ProfileSyncService* profile_sync_service, | |
336 UnrecoverableErrorHandler* error_handler) { | |
337 ThemeModelAssociator* model_associator = | |
338 new ThemeModelAssociator(profile_sync_service); | |
339 ThemeChangeProcessor* change_processor = | |
340 new ThemeChangeProcessor(error_handler); | |
341 return SyncComponents(model_associator, change_processor); | |
342 } | |
343 | |
344 ProfileSyncFactory::SyncComponents | |
345 ProfileSyncFactoryImpl::CreateTypedUrlSyncComponents( | |
346 ProfileSyncService* profile_sync_service, | |
347 history::HistoryBackend* history_backend, | |
348 browser_sync::UnrecoverableErrorHandler* error_handler) { | |
349 TypedUrlModelAssociator* model_associator = | |
350 new TypedUrlModelAssociator(profile_sync_service, | |
351 history_backend); | |
352 TypedUrlChangeProcessor* change_processor = | |
353 new TypedUrlChangeProcessor(profile_, | |
354 model_associator, | |
355 history_backend, | |
356 error_handler); | |
357 return SyncComponents(model_associator, change_processor); | |
358 } | |
359 | |
360 ProfileSyncFactory::SyncComponents | |
361 ProfileSyncFactoryImpl::CreateSessionSyncComponents( | |
362 ProfileSyncService* profile_sync_service, | |
363 UnrecoverableErrorHandler* error_handler) { | |
364 SessionModelAssociator* model_associator = | |
365 new SessionModelAssociator(profile_sync_service); | |
366 SessionChangeProcessor* change_processor = | |
367 new SessionChangeProcessor(error_handler, model_associator); | |
368 return SyncComponents(model_associator, change_processor); | |
369 } | |
370 | |
371 ProfileSyncFactory::SyncComponents | |
372 ProfileSyncFactoryImpl::CreateSearchEngineSyncComponents( | |
373 ProfileSyncService* profile_sync_service, | |
374 UnrecoverableErrorHandler* error_handler) { | |
375 base::WeakPtr<SyncableService> se_sync_service = | |
376 TemplateURLServiceFactory::GetForProfile(profile_)->AsWeakPtr(); | |
377 DCHECK(se_sync_service); | |
378 sync_api::UserShare* user_share = profile_sync_service->GetUserShare(); | |
379 GenericChangeProcessor* change_processor = | |
380 new GenericChangeProcessor(error_handler, | |
381 se_sync_service, | |
382 user_share); | |
383 SyncableServiceAdapter* sync_service_adapter = | |
384 new SyncableServiceAdapter(syncable::SEARCH_ENGINES, | |
385 se_sync_service, | |
386 change_processor); | |
387 return SyncComponents(sync_service_adapter, change_processor); | |
388 } | |
389 | |
390 ProfileSyncFactory::SyncComponents | |
391 ProfileSyncFactoryImpl::CreateAppNotificationSyncComponents( | |
392 ProfileSyncService* profile_sync_service, | |
393 browser_sync::UnrecoverableErrorHandler* error_handler) { | |
394 base::WeakPtr<SyncableService> notif_sync_service = | |
395 profile_->GetExtensionService()->app_notification_manager()->AsWeakPtr(); | |
396 DCHECK(notif_sync_service); | |
397 sync_api::UserShare* user_share = profile_sync_service->GetUserShare(); | |
398 GenericChangeProcessor* change_processor = | |
399 new GenericChangeProcessor(error_handler, | |
400 notif_sync_service, | |
401 user_share); | |
402 SyncableServiceAdapter* sync_service_adapter = | |
403 new SyncableServiceAdapter(syncable::APP_NOTIFICATIONS, | |
404 notif_sync_service, | |
405 change_processor); | |
406 return SyncComponents(sync_service_adapter, change_processor); | |
407 } | |
OLD | NEW |