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