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

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

Powered by Google App Engine
This is Rietveld 408576698