Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(827)

Side by Side Diff: components/browser_sync/browser/profile_sync_components_factory_impl.cc

Issue 1421003007: [Sync] Componentize ProfileSyncComponentsFactoryImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix browser_tests Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/profile_sync_components_factory_impl.h" 5 #include "components/browser_sync/browser/profile_sync_components_factory_impl.h "
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
11 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/search_engines/template_url_service_factory.h"
14 #include "chrome/browser/sync/glue/theme_data_type_controller.h"
15 #include "chrome/common/channel_info.h"
16 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/pref_names.h"
18 #include "components/autofill/core/browser/autofill_wallet_data_type_controller. h" 11 #include "components/autofill/core/browser/autofill_wallet_data_type_controller. h"
19 #include "components/autofill/core/browser/webdata/autofill_data_type_controller .h" 12 #include "components/autofill/core/browser/webdata/autofill_data_type_controller .h"
20 #include "components/autofill/core/browser/webdata/autofill_profile_data_type_co ntroller.h" 13 #include "components/autofill/core/browser/webdata/autofill_profile_data_type_co ntroller.h"
21 #include "components/autofill/core/common/autofill_pref_names.h" 14 #include "components/autofill/core/common/autofill_pref_names.h"
22 #include "components/autofill/core/common/autofill_switches.h" 15 #include "components/autofill/core/common/autofill_switches.h"
23 #include "components/browser_sync/browser/profile_sync_service.h" 16 #include "components/browser_sync/browser/profile_sync_service.h"
24 #include "components/browser_sync/common/browser_sync_switches.h" 17 #include "components/browser_sync/common/browser_sync_switches.h"
25 #include "components/dom_distiller/core/dom_distiller_features.h" 18 #include "components/dom_distiller/core/dom_distiller_features.h"
26 #include "components/history/core/browser/history_delete_directives_data_type_co ntroller.h" 19 #include "components/history/core/browser/history_delete_directives_data_type_co ntroller.h"
27 #include "components/history/core/browser/typed_url_change_processor.h" 20 #include "components/history/core/browser/typed_url_change_processor.h"
28 #include "components/history/core/browser/typed_url_data_type_controller.h" 21 #include "components/history/core/browser/typed_url_data_type_controller.h"
29 #include "components/history/core/browser/typed_url_model_associator.h" 22 #include "components/history/core/browser/typed_url_model_associator.h"
30 #include "components/password_manager/sync/browser/password_data_type_controller .h" 23 #include "components/password_manager/sync/browser/password_data_type_controller .h"
31 #include "components/search_engines/search_engine_data_type_controller.h"
32 #include "components/sync_bookmarks/bookmark_change_processor.h" 24 #include "components/sync_bookmarks/bookmark_change_processor.h"
33 #include "components/sync_bookmarks/bookmark_data_type_controller.h" 25 #include "components/sync_bookmarks/bookmark_data_type_controller.h"
34 #include "components/sync_bookmarks/bookmark_model_associator.h" 26 #include "components/sync_bookmarks/bookmark_model_associator.h"
35 #include "components/sync_driver/data_type_manager_impl.h" 27 #include "components/sync_driver/data_type_manager_impl.h"
36 #include "components/sync_driver/device_info_data_type_controller.h" 28 #include "components/sync_driver/device_info_data_type_controller.h"
37 #include "components/sync_driver/glue/chrome_report_unrecoverable_error.h" 29 #include "components/sync_driver/glue/chrome_report_unrecoverable_error.h"
38 #include "components/sync_driver/glue/sync_backend_host.h" 30 #include "components/sync_driver/glue/sync_backend_host.h"
39 #include "components/sync_driver/glue/sync_backend_host_impl.h" 31 #include "components/sync_driver/glue/sync_backend_host_impl.h"
40 #include "components/sync_driver/local_device_info_provider_impl.h" 32 #include "components/sync_driver/local_device_info_provider_impl.h"
41 #include "components/sync_driver/proxy_data_type_controller.h" 33 #include "components/sync_driver/proxy_data_type_controller.h"
42 #include "components/sync_driver/sync_client.h" 34 #include "components/sync_driver/sync_client.h"
43 #include "components/sync_driver/ui_data_type_controller.h" 35 #include "components/sync_driver/ui_data_type_controller.h"
44 #include "components/sync_sessions/session_data_type_controller.h" 36 #include "components/sync_sessions/session_data_type_controller.h"
45 #include "components/variations/variations_associated_data.h" 37 #include "components/variations/variations_associated_data.h"
46 #include "content/public/browser/browser_thread.h"
47 #include "google_apis/gaia/oauth2_token_service.h" 38 #include "google_apis/gaia/oauth2_token_service.h"
48 #include "google_apis/gaia/oauth2_token_service_request.h" 39 #include "google_apis/gaia/oauth2_token_service_request.h"
49 #include "net/url_request/url_request_context_getter.h" 40 #include "net/url_request/url_request_context_getter.h"
50 #include "sync/internal_api/public/attachments/attachment_downloader.h" 41 #include "sync/internal_api/public/attachments/attachment_downloader.h"
51 #include "sync/internal_api/public/attachments/attachment_service.h" 42 #include "sync/internal_api/public/attachments/attachment_service.h"
52 #include "sync/internal_api/public/attachments/attachment_service_impl.h" 43 #include "sync/internal_api/public/attachments/attachment_service_impl.h"
53 #include "sync/internal_api/public/attachments/attachment_uploader_impl.h" 44 #include "sync/internal_api/public/attachments/attachment_uploader_impl.h"
54 #include "ui/base/device_form_factor.h"
55
56 #if defined(ENABLE_APP_LIST)
57 #include "ui/app_list/app_list_switches.h"
58 #endif
59
60 #if defined(ENABLE_EXTENSIONS)
61 #include "chrome/browser/sync/glue/extension_data_type_controller.h"
62 #include "chrome/browser/sync/glue/extension_setting_data_type_controller.h"
63 #endif
64
65 #if defined(ENABLE_SUPERVISED_USERS)
66 #include "chrome/browser/supervised_user/supervised_user_sync_data_type_controll er.h"
67 #endif
68 45
69 using bookmarks::BookmarkModel; 46 using bookmarks::BookmarkModel;
70 using browser_sync::AutofillDataTypeController; 47 using browser_sync::AutofillDataTypeController;
71 using browser_sync::AutofillProfileDataTypeController; 48 using browser_sync::AutofillProfileDataTypeController;
72 using browser_sync::BookmarkChangeProcessor; 49 using browser_sync::BookmarkChangeProcessor;
73 using browser_sync::BookmarkDataTypeController; 50 using browser_sync::BookmarkDataTypeController;
74 using browser_sync::BookmarkModelAssociator; 51 using browser_sync::BookmarkModelAssociator;
75 using browser_sync::ChromeReportUnrecoverableError; 52 using browser_sync::ChromeReportUnrecoverableError;
76 #if defined(ENABLE_EXTENSIONS)
77 using browser_sync::ExtensionDataTypeController;
78 using browser_sync::ExtensionSettingDataTypeController;
79 #endif
80 using browser_sync::HistoryDeleteDirectivesDataTypeController; 53 using browser_sync::HistoryDeleteDirectivesDataTypeController;
81 using browser_sync::PasswordDataTypeController; 54 using browser_sync::PasswordDataTypeController;
82 using browser_sync::SearchEngineDataTypeController;
83 using browser_sync::SessionDataTypeController; 55 using browser_sync::SessionDataTypeController;
84 using browser_sync::SyncBackendHost; 56 using browser_sync::SyncBackendHost;
85 using browser_sync::ThemeDataTypeController;
86 using browser_sync::TypedUrlChangeProcessor; 57 using browser_sync::TypedUrlChangeProcessor;
87 using browser_sync::TypedUrlDataTypeController; 58 using browser_sync::TypedUrlDataTypeController;
88 using browser_sync::TypedUrlModelAssociator; 59 using browser_sync::TypedUrlModelAssociator;
89 using content::BrowserThread;
90 using sync_driver::DataTypeController; 60 using sync_driver::DataTypeController;
91 using sync_driver::DataTypeErrorHandler; 61 using sync_driver::DataTypeErrorHandler;
92 using sync_driver::DataTypeManager; 62 using sync_driver::DataTypeManager;
93 using sync_driver::DataTypeManagerImpl; 63 using sync_driver::DataTypeManagerImpl;
94 using sync_driver::DataTypeManagerObserver; 64 using sync_driver::DataTypeManagerObserver;
95 using sync_driver::DeviceInfoDataTypeController; 65 using sync_driver::DeviceInfoDataTypeController;
96 using sync_driver::ProxyDataTypeController; 66 using sync_driver::ProxyDataTypeController;
97 using sync_driver::UIDataTypeController; 67 using sync_driver::UIDataTypeController;
98 68
99 namespace { 69 namespace {
(...skipping 20 matching lines...) Expand all
120 } 90 }
121 91
122 syncer::ModelTypeSet GetEnabledTypesFromCommandLine( 92 syncer::ModelTypeSet GetEnabledTypesFromCommandLine(
123 const base::CommandLine& command_line) { 93 const base::CommandLine& command_line) {
124 return syncer::ModelTypeSet(); 94 return syncer::ModelTypeSet();
125 } 95 }
126 96
127 } // namespace 97 } // namespace
128 98
129 ProfileSyncComponentsFactoryImpl::ProfileSyncComponentsFactoryImpl( 99 ProfileSyncComponentsFactoryImpl::ProfileSyncComponentsFactoryImpl(
130 Profile* profile, 100 sync_driver::SyncClient* sync_client,
131 base::CommandLine* command_line, 101 version_info::Channel channel,
102 const std::string& version,
103 bool is_tablet,
104 const base::CommandLine& command_line,
105 const char* history_disabled_pref,
132 const GURL& sync_service_url, 106 const GURL& sync_service_url,
107 const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread,
108 const scoped_refptr<base::SingleThreadTaskRunner>& db_thread,
133 OAuth2TokenService* token_service, 109 OAuth2TokenService* token_service,
134 net::URLRequestContextGetter* url_request_context_getter) 110 net::URLRequestContextGetter* url_request_context_getter)
135 : profile_(profile), 111 : sync_client_(sync_client),
112 channel_(channel),
113 version_(version),
114 is_tablet_(is_tablet),
136 command_line_(command_line), 115 command_line_(command_line),
116 history_disabled_pref_(history_disabled_pref),
137 sync_service_url_(sync_service_url), 117 sync_service_url_(sync_service_url),
118 ui_thread_(ui_thread),
119 db_thread_(db_thread),
138 token_service_(token_service), 120 token_service_(token_service),
139 url_request_context_getter_(url_request_context_getter), 121 url_request_context_getter_(url_request_context_getter),
140 weak_factory_(this) { 122 weak_factory_(this) {
141 DCHECK(token_service_); 123 DCHECK(token_service_);
142 DCHECK(url_request_context_getter_); 124 DCHECK(url_request_context_getter_);
143 } 125 }
144 126
145 ProfileSyncComponentsFactoryImpl::~ProfileSyncComponentsFactoryImpl() { 127 ProfileSyncComponentsFactoryImpl::~ProfileSyncComponentsFactoryImpl() {}
146 }
147 128
148 void ProfileSyncComponentsFactoryImpl::RegisterDataTypes( 129 void ProfileSyncComponentsFactoryImpl::RegisterDataTypes(
149 sync_driver::SyncClient* sync_client) { 130 const RegisterDataTypesMethod& register_platform_types_method) {
150 syncer::ModelTypeSet disabled_types = 131 syncer::ModelTypeSet disabled_types =
151 GetDisabledTypesFromCommandLine(*command_line_); 132 GetDisabledTypesFromCommandLine(command_line_);
152 syncer::ModelTypeSet enabled_types = 133 syncer::ModelTypeSet enabled_types =
153 GetEnabledTypesFromCommandLine(*command_line_); 134 GetEnabledTypesFromCommandLine(command_line_);
154 RegisterCommonDataTypes(disabled_types, enabled_types, sync_client); 135 RegisterCommonDataTypes(disabled_types, enabled_types);
155 #if !defined(OS_ANDROID) 136 if (!register_platform_types_method.is_null())
156 RegisterDesktopDataTypes(disabled_types, enabled_types, sync_client); 137 register_platform_types_method.Run(disabled_types, enabled_types);
157 #endif
158 } 138 }
159 139
160 void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes( 140 void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes(
161 syncer::ModelTypeSet disabled_types, 141 syncer::ModelTypeSet disabled_types,
162 syncer::ModelTypeSet enabled_types, 142 syncer::ModelTypeSet enabled_types) {
163 sync_driver::SyncClient* sync_client) { 143 sync_driver::SyncService* sync_service = sync_client_->GetSyncService();
164 sync_driver::SyncService* sync_service = sync_client->GetSyncService();
165 base::Closure error_callback = 144 base::Closure error_callback =
166 base::Bind(&ChromeReportUnrecoverableError, chrome::GetChannel()); 145 base::Bind(&ChromeReportUnrecoverableError, channel_);
167 const scoped_refptr<base::SingleThreadTaskRunner> ui_thread =
168 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
169 const scoped_refptr<base::SingleThreadTaskRunner> db_thread =
170 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB);
171 146
172 // TODO(stanisc): can DEVICE_INFO be one of disabled datatypes? 147 // TODO(stanisc): can DEVICE_INFO be one of disabled datatypes?
173 sync_service->RegisterDataTypeController(new DeviceInfoDataTypeController( 148 sync_service->RegisterDataTypeController(new DeviceInfoDataTypeController(
174 ui_thread, error_callback, sync_client, 149 ui_thread_, error_callback, sync_client_,
175 sync_service->GetLocalDeviceInfoProvider())); 150 sync_service->GetLocalDeviceInfoProvider()));
176 151
177 // Autofill sync is enabled by default. Register unless explicitly 152 // Autofill sync is enabled by default. Register unless explicitly
178 // disabled. 153 // disabled.
179 if (!disabled_types.Has(syncer::AUTOFILL)) { 154 if (!disabled_types.Has(syncer::AUTOFILL)) {
180 sync_service->RegisterDataTypeController(new AutofillDataTypeController( 155 sync_service->RegisterDataTypeController(new AutofillDataTypeController(
181 ui_thread, db_thread, error_callback, sync_client)); 156 ui_thread_, db_thread_, error_callback, sync_client_));
182 } 157 }
183 158
184 // Autofill profile sync is enabled by default. Register unless explicitly 159 // Autofill profile sync is enabled by default. Register unless explicitly
185 // disabled. 160 // disabled.
186 if (!disabled_types.Has(syncer::AUTOFILL_PROFILE)) { 161 if (!disabled_types.Has(syncer::AUTOFILL_PROFILE)) {
187 sync_service->RegisterDataTypeController( 162 sync_service->RegisterDataTypeController(
188 new AutofillProfileDataTypeController(ui_thread, db_thread, 163 new AutofillProfileDataTypeController(ui_thread_, db_thread_,
189 error_callback, sync_client)); 164 error_callback, sync_client_));
190 } 165 }
191 166
192 // Wallet data sync is enabled by default, but behind a syncer experiment 167 // Wallet data sync is enabled by default, but behind a syncer experiment
193 // enforced by the datatype controller. Register unless explicitly disabled. 168 // enforced by the datatype controller. Register unless explicitly disabled.
194 bool wallet_disabled = disabled_types.Has(syncer::AUTOFILL_WALLET_DATA); 169 bool wallet_disabled = disabled_types.Has(syncer::AUTOFILL_WALLET_DATA);
195 if (!wallet_disabled) { 170 if (!wallet_disabled) {
196 sync_service->RegisterDataTypeController( 171 sync_service->RegisterDataTypeController(
197 new browser_sync::AutofillWalletDataTypeController( 172 new browser_sync::AutofillWalletDataTypeController(
198 ui_thread, db_thread, error_callback, sync_client, 173 ui_thread_, db_thread_, error_callback, sync_client_,
199 syncer::AUTOFILL_WALLET_DATA)); 174 syncer::AUTOFILL_WALLET_DATA));
200 } 175 }
201 176
202 // Wallet metadata sync depends on Wallet data sync. Register if Wallet data 177 // Wallet metadata sync depends on Wallet data sync. Register if Wallet data
203 // is syncing and metadata sync is not explicitly disabled. 178 // is syncing and metadata sync is not explicitly disabled.
204 if (!wallet_disabled && 179 if (!wallet_disabled &&
205 !disabled_types.Has(syncer::AUTOFILL_WALLET_METADATA)) { 180 !disabled_types.Has(syncer::AUTOFILL_WALLET_METADATA)) {
206 sync_service->RegisterDataTypeController( 181 sync_service->RegisterDataTypeController(
207 new browser_sync::AutofillWalletDataTypeController( 182 new browser_sync::AutofillWalletDataTypeController(
208 ui_thread, db_thread, error_callback, sync_client, 183 ui_thread_, db_thread_, error_callback, sync_client_,
209 syncer::AUTOFILL_WALLET_METADATA)); 184 syncer::AUTOFILL_WALLET_METADATA));
210 } 185 }
211 186
212 // Bookmark sync is enabled by default. Register unless explicitly 187 // Bookmark sync is enabled by default. Register unless explicitly
213 // disabled. 188 // disabled.
214 if (!disabled_types.Has(syncer::BOOKMARKS)) { 189 if (!disabled_types.Has(syncer::BOOKMARKS)) {
215 sync_service->RegisterDataTypeController( 190 sync_service->RegisterDataTypeController(new BookmarkDataTypeController(
216 new BookmarkDataTypeController(ui_thread, error_callback, sync_client)); 191 ui_thread_, error_callback, sync_client_));
217 } 192 }
218 193
219 const bool history_disabled = 194 const bool history_disabled =
220 profile_->GetPrefs()->GetBoolean(prefs::kSavingBrowserHistoryDisabled); 195 sync_client_->GetPrefService()->GetBoolean(history_disabled_pref_);
221 // TypedUrl sync is enabled by default. Register unless explicitly disabled, 196 // TypedUrl sync is enabled by default. Register unless explicitly disabled,
222 // or if saving history is disabled. 197 // or if saving history is disabled.
223 if (!disabled_types.Has(syncer::TYPED_URLS) && !history_disabled) { 198 if (!disabled_types.Has(syncer::TYPED_URLS) && !history_disabled) {
224 sync_service->RegisterDataTypeController( 199 sync_service->RegisterDataTypeController(new TypedUrlDataTypeController(
225 new TypedUrlDataTypeController(ui_thread, error_callback, sync_client, 200 ui_thread_, error_callback, sync_client_, history_disabled_pref_));
226 prefs::kSavingBrowserHistoryDisabled));
227 } 201 }
228 202
229 // Delete directive sync is enabled by default. Register unless full history 203 // Delete directive sync is enabled by default. Register unless full history
230 // sync is disabled. 204 // sync is disabled.
231 if (!disabled_types.Has(syncer::HISTORY_DELETE_DIRECTIVES) && 205 if (!disabled_types.Has(syncer::HISTORY_DELETE_DIRECTIVES) &&
232 !history_disabled) { 206 !history_disabled) {
233 sync_service->RegisterDataTypeController( 207 sync_service->RegisterDataTypeController(
234 new HistoryDeleteDirectivesDataTypeController(ui_thread, error_callback, 208 new HistoryDeleteDirectivesDataTypeController(
235 sync_client)); 209 ui_thread_, error_callback, sync_client_));
236 } 210 }
237 211
238 // Session sync is enabled by default. Register unless explicitly disabled. 212 // Session sync is enabled by default. Register unless explicitly disabled.
239 // This is also disabled if the browser history is disabled, because the 213 // This is also disabled if the browser history is disabled, because the
240 // tab sync data is added to the web history on the server. 214 // tab sync data is added to the web history on the server.
241 if (!disabled_types.Has(syncer::PROXY_TABS) && !history_disabled) { 215 if (!disabled_types.Has(syncer::PROXY_TABS) && !history_disabled) {
242 sync_service->RegisterDataTypeController( 216 sync_service->RegisterDataTypeController(
243 new ProxyDataTypeController(ui_thread, syncer::PROXY_TABS)); 217 new ProxyDataTypeController(ui_thread_, syncer::PROXY_TABS));
244 // TODO(zea): remove this once SyncedWindowDelegateGetter is componentized. 218 // TODO(zea): remove this once SyncedWindowDelegateGetter is componentized.
245 // For now, we know that the implementation of SyncService is always a 219 // For now, we know that the implementation of SyncService is always a
246 // ProfileSyncService at this level. 220 // ProfileSyncService at this level.
247 ProfileSyncService* pss = static_cast<ProfileSyncService*>(sync_service); 221 ProfileSyncService* pss = static_cast<ProfileSyncService*>(sync_service);
248 sync_service->RegisterDataTypeController(new SessionDataTypeController( 222 sync_service->RegisterDataTypeController(new SessionDataTypeController(
249 ui_thread, error_callback, sync_client, 223 ui_thread_, error_callback, sync_client_,
250 pss->GetSyncedWindowDelegatesGetter(), 224 pss->GetSyncedWindowDelegatesGetter(),
251 sync_service->GetLocalDeviceInfoProvider(), 225 sync_service->GetLocalDeviceInfoProvider(), history_disabled_pref_));
252 prefs::kSavingBrowserHistoryDisabled));
253 } 226 }
254 227
255 // Favicon sync is enabled by default. Register unless explicitly disabled. 228 // Favicon sync is enabled by default. Register unless explicitly disabled.
256 if (!disabled_types.Has(syncer::FAVICON_IMAGES) && 229 if (!disabled_types.Has(syncer::FAVICON_IMAGES) &&
257 !disabled_types.Has(syncer::FAVICON_TRACKING) && 230 !disabled_types.Has(syncer::FAVICON_TRACKING) && !history_disabled) {
258 !history_disabled) {
259 // crbug/384552. We disable error uploading for this data types for now. 231 // crbug/384552. We disable error uploading for this data types for now.
260 sync_service->RegisterDataTypeController(new UIDataTypeController( 232 sync_service->RegisterDataTypeController(new UIDataTypeController(
261 ui_thread, base::Closure(), syncer::FAVICON_IMAGES, sync_client)); 233 ui_thread_, base::Closure(), syncer::FAVICON_IMAGES, sync_client_));
262 sync_service->RegisterDataTypeController(new UIDataTypeController( 234 sync_service->RegisterDataTypeController(new UIDataTypeController(
263 ui_thread, base::Closure(), syncer::FAVICON_TRACKING, sync_client)); 235 ui_thread_, base::Closure(), syncer::FAVICON_TRACKING, sync_client_));
264 } 236 }
265 237
266 // Password sync is enabled by default. Register unless explicitly 238 // Password sync is enabled by default. Register unless explicitly
267 // disabled. 239 // disabled.
268 if (!disabled_types.Has(syncer::PASSWORDS)) { 240 if (!disabled_types.Has(syncer::PASSWORDS)) {
269 sync_service->RegisterDataTypeController(new PasswordDataTypeController( 241 sync_service->RegisterDataTypeController(new PasswordDataTypeController(
270 ui_thread, error_callback, sync_client, 242 ui_thread_, error_callback, sync_client_,
271 sync_client->GetPasswordStateChangedCallback())); 243 sync_client_->GetPasswordStateChangedCallback()));
272 } 244 }
273 245
274 if (!disabled_types.Has(syncer::PRIORITY_PREFERENCES)) { 246 if (!disabled_types.Has(syncer::PRIORITY_PREFERENCES)) {
275 sync_service->RegisterDataTypeController(new UIDataTypeController( 247 sync_service->RegisterDataTypeController(
276 ui_thread, error_callback, syncer::PRIORITY_PREFERENCES, sync_client)); 248 new UIDataTypeController(ui_thread_, error_callback,
249 syncer::PRIORITY_PREFERENCES, sync_client_));
277 } 250 }
278 251
279 // Article sync is disabled by default. Register only if explicitly enabled. 252 // Article sync is disabled by default. Register only if explicitly enabled.
280 if (dom_distiller::IsEnableSyncArticlesSet()) { 253 if (dom_distiller::IsEnableSyncArticlesSet()) {
281 sync_service->RegisterDataTypeController(new UIDataTypeController( 254 sync_service->RegisterDataTypeController(new UIDataTypeController(
282 ui_thread, error_callback, syncer::ARTICLES, sync_client)); 255 ui_thread_, error_callback, syncer::ARTICLES, sync_client_));
283 } 256 }
284
285 #if defined(ENABLE_SUPERVISED_USERS)
286 sync_service->RegisterDataTypeController(
287 new SupervisedUserSyncDataTypeController(syncer::SUPERVISED_USER_SETTINGS,
288 error_callback, sync_client,
289 profile_));
290 sync_service->RegisterDataTypeController(
291 new SupervisedUserSyncDataTypeController(
292 syncer::SUPERVISED_USER_WHITELISTS, error_callback, sync_client,
293 profile_));
294 #endif
295 }
296
297 void ProfileSyncComponentsFactoryImpl::RegisterDesktopDataTypes(
298 syncer::ModelTypeSet disabled_types,
299 syncer::ModelTypeSet enabled_types,
300 sync_driver::SyncClient* sync_client) {
301 sync_driver::SyncService* sync_service = sync_client->GetSyncService();
302 base::Closure error_callback =
303 base::Bind(&ChromeReportUnrecoverableError, chrome::GetChannel());
304 const scoped_refptr<base::SingleThreadTaskRunner> ui_thread =
305 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
306
307 #if defined(ENABLE_EXTENSIONS)
308 // App sync is enabled by default. Register unless explicitly
309 // disabled.
310 if (!disabled_types.Has(syncer::APPS)) {
311 sync_service->RegisterDataTypeController(new ExtensionDataTypeController(
312 syncer::APPS, error_callback, sync_client, profile_));
313 }
314
315 // Extension sync is enabled by default. Register unless explicitly
316 // disabled.
317 if (!disabled_types.Has(syncer::EXTENSIONS)) {
318 sync_service->RegisterDataTypeController(new ExtensionDataTypeController(
319 syncer::EXTENSIONS, error_callback, sync_client, profile_));
320 }
321 #endif
322
323 // Preference sync is enabled by default. Register unless explicitly
324 // disabled.
325 if (!disabled_types.Has(syncer::PREFERENCES)) {
326 sync_service->RegisterDataTypeController(new UIDataTypeController(
327 ui_thread, error_callback, syncer::PREFERENCES, sync_client));
328 }
329
330 #if defined(ENABLE_THEMES)
331 // Theme sync is enabled by default. Register unless explicitly disabled.
332 if (!disabled_types.Has(syncer::THEMES)) {
333 sync_service->RegisterDataTypeController(
334 new ThemeDataTypeController(error_callback, sync_client, profile_));
335 }
336 #endif
337
338 // Search Engine sync is enabled by default. Register unless explicitly
339 // disabled.
340 if (!disabled_types.Has(syncer::SEARCH_ENGINES)) {
341 sync_service->RegisterDataTypeController(new SearchEngineDataTypeController(
342 ui_thread, error_callback, sync_client,
343 TemplateURLServiceFactory::GetForProfile(profile_)));
344 }
345
346 #if defined(ENABLE_EXTENSIONS)
347 // Extension setting sync is enabled by default. Register unless explicitly
348 // disabled.
349 if (!disabled_types.Has(syncer::EXTENSION_SETTINGS)) {
350 sync_service->RegisterDataTypeController(
351 new ExtensionSettingDataTypeController(
352 syncer::EXTENSION_SETTINGS, error_callback, sync_client, profile_));
353 }
354
355 // App setting sync is enabled by default. Register unless explicitly
356 // disabled.
357 if (!disabled_types.Has(syncer::APP_SETTINGS)) {
358 sync_service->RegisterDataTypeController(
359 new ExtensionSettingDataTypeController(
360 syncer::APP_SETTINGS, error_callback, sync_client, profile_));
361 }
362 #endif
363
364 #if defined(ENABLE_APP_LIST)
365 if (app_list::switches::IsAppListSyncEnabled()) {
366 sync_service->RegisterDataTypeController(new UIDataTypeController(
367 ui_thread, error_callback, syncer::APP_LIST, sync_client));
368 }
369 #endif
370
371 #if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_CHROMEOS)
372 // Dictionary sync is enabled by default.
373 if (!disabled_types.Has(syncer::DICTIONARY)) {
374 sync_service->RegisterDataTypeController(new UIDataTypeController(
375 ui_thread, error_callback, syncer::DICTIONARY, sync_client));
376 }
377 #endif
378
379 #if defined(ENABLE_SUPERVISED_USERS)
380 sync_service->RegisterDataTypeController(
381 new SupervisedUserSyncDataTypeController(
382 syncer::SUPERVISED_USERS, error_callback, sync_client, profile_));
383 sync_service->RegisterDataTypeController(
384 new SupervisedUserSyncDataTypeController(
385 syncer::SUPERVISED_USER_SHARED_SETTINGS, error_callback, sync_client,
386 profile_));
387 #endif
388
389 #if defined(OS_CHROMEOS)
390 if (command_line_->HasSwitch(switches::kEnableWifiCredentialSync) &&
391 !disabled_types.Has(syncer::WIFI_CREDENTIALS)) {
392 sync_service->RegisterDataTypeController(new UIDataTypeController(
393 ui_thread, error_callback, syncer::WIFI_CREDENTIALS, sync_client));
394 }
395 #endif
396 } 257 }
397 258
398 DataTypeManager* ProfileSyncComponentsFactoryImpl::CreateDataTypeManager( 259 DataTypeManager* ProfileSyncComponentsFactoryImpl::CreateDataTypeManager(
399 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& 260 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>&
400 debug_info_listener, 261 debug_info_listener,
401 const DataTypeController::TypeMap* controllers, 262 const DataTypeController::TypeMap* controllers,
402 const sync_driver::DataTypeEncryptionHandler* encryption_handler, 263 const sync_driver::DataTypeEncryptionHandler* encryption_handler,
403 SyncBackendHost* backend, 264 SyncBackendHost* backend,
404 DataTypeManagerObserver* observer) { 265 DataTypeManagerObserver* observer) {
405 return new DataTypeManagerImpl(debug_info_listener, controllers, 266 return new DataTypeManagerImpl(debug_info_listener, controllers,
406 encryption_handler, backend, observer); 267 encryption_handler, backend, observer);
407 } 268 }
408 269
409 browser_sync::SyncBackendHost* 270 browser_sync::SyncBackendHost*
410 ProfileSyncComponentsFactoryImpl::CreateSyncBackendHost( 271 ProfileSyncComponentsFactoryImpl::CreateSyncBackendHost(
411 const std::string& name, 272 const std::string& name,
412 sync_driver::SyncClient* sync_client,
413 invalidation::InvalidationService* invalidator, 273 invalidation::InvalidationService* invalidator,
414 const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs, 274 const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs,
415 const base::FilePath& sync_folder) { 275 const base::FilePath& sync_folder) {
416 return new browser_sync::SyncBackendHostImpl( 276 return new browser_sync::SyncBackendHostImpl(
417 name, sync_client, 277 name, sync_client_, ui_thread_, invalidator, sync_prefs, sync_folder);
418 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI),
419 invalidator, sync_prefs, sync_folder);
420 } 278 }
421 279
422 scoped_ptr<sync_driver::LocalDeviceInfoProvider> 280 scoped_ptr<sync_driver::LocalDeviceInfoProvider>
423 ProfileSyncComponentsFactoryImpl::CreateLocalDeviceInfoProvider() { 281 ProfileSyncComponentsFactoryImpl::CreateLocalDeviceInfoProvider() {
424 return scoped_ptr<sync_driver::LocalDeviceInfoProvider>( 282 return scoped_ptr<sync_driver::LocalDeviceInfoProvider>(
425 new browser_sync::LocalDeviceInfoProviderImpl( 283 new browser_sync::LocalDeviceInfoProviderImpl(channel_, version_,
426 chrome::GetChannel(), 284 is_tablet_));
427 chrome::GetVersionString(),
428 ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET));
429 } 285 }
430 286
431 class TokenServiceProvider 287 class TokenServiceProvider
432 : public OAuth2TokenServiceRequest::TokenServiceProvider { 288 : public OAuth2TokenServiceRequest::TokenServiceProvider {
433 public: 289 public:
434 TokenServiceProvider( 290 TokenServiceProvider(
435 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 291 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
436 OAuth2TokenService* token_service); 292 OAuth2TokenService* token_service);
437 293
438 // OAuth2TokenServiceRequest::TokenServiceProvider implementation. 294 // OAuth2TokenServiceRequest::TokenServiceProvider implementation.
439 scoped_refptr<base::SingleThreadTaskRunner> GetTokenServiceTaskRunner() 295 scoped_refptr<base::SingleThreadTaskRunner> GetTokenServiceTaskRunner()
440 override; 296 override;
441 OAuth2TokenService* GetTokenService() override; 297 OAuth2TokenService* GetTokenService() override;
442 298
443 private: 299 private:
444 ~TokenServiceProvider() override; 300 ~TokenServiceProvider() override;
445 301
446 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 302 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
447 OAuth2TokenService* token_service_; 303 OAuth2TokenService* token_service_;
448 }; 304 };
449 305
450 TokenServiceProvider::TokenServiceProvider( 306 TokenServiceProvider::TokenServiceProvider(
451 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 307 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
452 OAuth2TokenService* token_service) 308 OAuth2TokenService* token_service)
453 : task_runner_(task_runner), token_service_(token_service) { 309 : task_runner_(task_runner), token_service_(token_service) {}
454 }
455 310
456 TokenServiceProvider::~TokenServiceProvider() { 311 TokenServiceProvider::~TokenServiceProvider() {}
457 }
458 312
459 scoped_refptr<base::SingleThreadTaskRunner> 313 scoped_refptr<base::SingleThreadTaskRunner>
460 TokenServiceProvider::GetTokenServiceTaskRunner() { 314 TokenServiceProvider::GetTokenServiceTaskRunner() {
461 return task_runner_; 315 return task_runner_;
462 } 316 }
463 317
464 OAuth2TokenService* TokenServiceProvider::GetTokenService() { 318 OAuth2TokenService* TokenServiceProvider::GetTokenService() {
465 return token_service_; 319 return token_service_;
466 } 320 }
467 321
468 scoped_ptr<syncer::AttachmentService> 322 scoped_ptr<syncer::AttachmentService>
469 ProfileSyncComponentsFactoryImpl::CreateAttachmentService( 323 ProfileSyncComponentsFactoryImpl::CreateAttachmentService(
470 scoped_ptr<syncer::AttachmentStoreForSync> attachment_store, 324 scoped_ptr<syncer::AttachmentStoreForSync> attachment_store,
471 const syncer::UserShare& user_share, 325 const syncer::UserShare& user_share,
472 const std::string& store_birthday, 326 const std::string& store_birthday,
473 syncer::ModelType model_type, 327 syncer::ModelType model_type,
474 syncer::AttachmentService::Delegate* delegate) { 328 syncer::AttachmentService::Delegate* delegate) {
475 scoped_ptr<syncer::AttachmentUploader> attachment_uploader; 329 scoped_ptr<syncer::AttachmentUploader> attachment_uploader;
476 scoped_ptr<syncer::AttachmentDownloader> attachment_downloader; 330 scoped_ptr<syncer::AttachmentDownloader> attachment_downloader;
477 // Only construct an AttachmentUploader and AttachmentDownload if we have sync 331 // Only construct an AttachmentUploader and AttachmentDownload if we have sync
478 // credentials. We may not have sync credentials because there may not be a 332 // credentials. We may not have sync credentials because there may not be a
479 // signed in sync user (e.g. sync is running in "backup" mode). 333 // signed in sync user (e.g. sync is running in "backup" mode).
480 if (!user_share.sync_credentials.email.empty() && 334 if (!user_share.sync_credentials.email.empty() &&
481 !user_share.sync_credentials.scope_set.empty()) { 335 !user_share.sync_credentials.scope_set.empty()) {
482 const scoped_refptr<base::SingleThreadTaskRunner> ui_thread =
483 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
484
485 scoped_refptr<OAuth2TokenServiceRequest::TokenServiceProvider> 336 scoped_refptr<OAuth2TokenServiceRequest::TokenServiceProvider>
486 token_service_provider( 337 token_service_provider(
487 new TokenServiceProvider(ui_thread, token_service_)); 338 new TokenServiceProvider(ui_thread_, token_service_));
488 // TODO(maniscalco): Use shared (one per profile) thread-safe instances of 339 // TODO(maniscalco): Use shared (one per profile) thread-safe instances of
489 // AttachmentUploader and AttachmentDownloader instead of creating a new one 340 // AttachmentUploader and AttachmentDownloader instead of creating a new one
490 // per AttachmentService (bug 369536). 341 // per AttachmentService (bug 369536).
491 attachment_uploader.reset(new syncer::AttachmentUploaderImpl( 342 attachment_uploader.reset(new syncer::AttachmentUploaderImpl(
492 sync_service_url_, url_request_context_getter_, 343 sync_service_url_, url_request_context_getter_,
493 user_share.sync_credentials.email, 344 user_share.sync_credentials.email,
494 user_share.sync_credentials.scope_set, token_service_provider, 345 user_share.sync_credentials.scope_set, token_service_provider,
495 store_birthday, model_type)); 346 store_birthday, model_type));
496 347
497 token_service_provider = 348 token_service_provider =
498 new TokenServiceProvider(ui_thread, token_service_); 349 new TokenServiceProvider(ui_thread_, token_service_);
499 attachment_downloader = syncer::AttachmentDownloader::Create( 350 attachment_downloader = syncer::AttachmentDownloader::Create(
500 sync_service_url_, url_request_context_getter_, 351 sync_service_url_, url_request_context_getter_,
501 user_share.sync_credentials.email, 352 user_share.sync_credentials.email,
502 user_share.sync_credentials.scope_set, token_service_provider, 353 user_share.sync_credentials.scope_set, token_service_provider,
503 store_birthday, model_type); 354 store_birthday, model_type);
504 } 355 }
505 356
506 // It is important that the initial backoff delay is relatively large. For 357 // It is important that the initial backoff delay is relatively large. For
507 // whatever reason, the server may fail all requests for a short period of 358 // whatever reason, the server may fail all requests for a short period of
508 // time. When this happens we don't want to overwhelm the server with 359 // time. When this happens we don't want to overwhelm the server with
509 // requests so we use a large initial backoff. 360 // requests so we use a large initial backoff.
510 const base::TimeDelta initial_backoff_delay = 361 const base::TimeDelta initial_backoff_delay =
511 base::TimeDelta::FromMinutes(30); 362 base::TimeDelta::FromMinutes(30);
512 const base::TimeDelta max_backoff_delay = base::TimeDelta::FromHours(4); 363 const base::TimeDelta max_backoff_delay = base::TimeDelta::FromHours(4);
513 scoped_ptr<syncer::AttachmentService> attachment_service( 364 scoped_ptr<syncer::AttachmentService> attachment_service(
514 new syncer::AttachmentServiceImpl( 365 new syncer::AttachmentServiceImpl(
515 attachment_store.Pass(), attachment_uploader.Pass(), 366 attachment_store.Pass(), attachment_uploader.Pass(),
516 attachment_downloader.Pass(), delegate, initial_backoff_delay, 367 attachment_downloader.Pass(), delegate, initial_backoff_delay,
517 max_backoff_delay)); 368 max_backoff_delay));
518 return attachment_service.Pass(); 369 return attachment_service.Pass();
519 } 370 }
520 371
521 sync_driver::SyncApiComponentFactory::SyncComponents 372 sync_driver::SyncApiComponentFactory::SyncComponents
522 ProfileSyncComponentsFactoryImpl::CreateBookmarkSyncComponents( 373 ProfileSyncComponentsFactoryImpl::CreateBookmarkSyncComponents(
523 sync_driver::SyncService* sync_service, 374 sync_driver::SyncService* sync_service,
524 sync_driver::DataTypeErrorHandler* error_handler) { 375 sync_driver::DataTypeErrorHandler* error_handler) {
525 BookmarkModel* bookmark_model = 376 BookmarkModel* bookmark_model =
526 BookmarkModelFactory::GetForProfile(profile_); 377 sync_service->GetSyncClient()->GetBookmarkModel();
527 syncer::UserShare* user_share = sync_service->GetUserShare(); 378 syncer::UserShare* user_share = sync_service->GetUserShare();
528 // TODO(akalin): We may want to propagate this switch up eventually. 379 // TODO(akalin): We may want to propagate this switch up eventually.
529 #if defined(OS_ANDROID) 380 #if defined(OS_ANDROID) || defined(OS_IOS)
530 const bool kExpectMobileBookmarksFolder = true; 381 const bool kExpectMobileBookmarksFolder = true;
531 #else 382 #else
532 const bool kExpectMobileBookmarksFolder = false; 383 const bool kExpectMobileBookmarksFolder = false;
533 #endif 384 #endif
534 BookmarkModelAssociator* model_associator = new BookmarkModelAssociator( 385 BookmarkModelAssociator* model_associator = new BookmarkModelAssociator(
535 bookmark_model, sync_service->GetSyncClient(), user_share, error_handler, 386 bookmark_model, sync_service->GetSyncClient(), user_share, error_handler,
536 kExpectMobileBookmarksFolder); 387 kExpectMobileBookmarksFolder);
537 BookmarkChangeProcessor* change_processor = new BookmarkChangeProcessor( 388 BookmarkChangeProcessor* change_processor = new BookmarkChangeProcessor(
538 sync_service->GetSyncClient(), model_associator, error_handler); 389 sync_service->GetSyncClient(), model_associator, error_handler);
539 return SyncComponents(model_associator, change_processor); 390 return SyncComponents(model_associator, change_processor);
540 } 391 }
541 392
542 sync_driver::SyncApiComponentFactory::SyncComponents 393 sync_driver::SyncApiComponentFactory::SyncComponents
543 ProfileSyncComponentsFactoryImpl::CreateTypedUrlSyncComponents( 394 ProfileSyncComponentsFactoryImpl::CreateTypedUrlSyncComponents(
544 sync_driver::SyncService* sync_service, 395 sync_driver::SyncService* sync_service,
545 history::HistoryBackend* history_backend, 396 history::HistoryBackend* history_backend,
546 sync_driver::DataTypeErrorHandler* error_handler) { 397 sync_driver::DataTypeErrorHandler* error_handler) {
547 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI)); 398 DCHECK(ui_thread_->BelongsToCurrentThread());
548
549 const scoped_refptr<base::SingleThreadTaskRunner> ui_thread =
550 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
551 399
552 // TODO(zea): Once TypedURLs are converted to SyncableService, remove 400 // TODO(zea): Once TypedURLs are converted to SyncableService, remove
553 // |sync_service_| member, and make GetSyncService require it be called on 401 // |sync_service_| member, and make GetSyncService require it be called on
554 // the UI thread. 402 // the UI thread.
555 TypedUrlModelAssociator* model_associator = 403 TypedUrlModelAssociator* model_associator =
556 new TypedUrlModelAssociator(sync_service, 404 new TypedUrlModelAssociator(sync_service, history_backend, error_handler);
557 history_backend,
558 error_handler);
559 TypedUrlChangeProcessor* change_processor = new TypedUrlChangeProcessor( 405 TypedUrlChangeProcessor* change_processor = new TypedUrlChangeProcessor(
560 model_associator, history_backend, error_handler, ui_thread); 406 model_associator, history_backend, error_handler, ui_thread_);
561 return SyncComponents(model_associator, change_processor); 407 return SyncComponents(model_associator, change_processor);
562 } 408 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698