15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/bookmarks/enhanced_bookmarks_features.h" 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/dom_distiller/dom_distiller_service_factory.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/notifications/sync_notifier/chrome_notifier_service.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/notifications/sync_notifier/chrome_notifier_service_factory.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/password_manager/password_store_factory.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/pref_service_flags_storage.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/pref_model_associator.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/autofill_data_type_controller.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/bookmark_change_processor.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/bookmark_data_type_controller.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/bookmark_model_associator.h" 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h" 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/sync/glue/extension_backed_data_type_controller.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/extension_data_type_controller.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/extension_setting_data_type_controller.h" 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/sync/glue/history_delete_directives_data_type_controller.h" 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/glue/local_device_info_provider_impl.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/password_data_type_controller.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/search_engine_data_type_controller.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/sync_backend_host.h" 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/sync/glue/sync_backend_host_impl.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/theme_data_type_controller.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/typed_url_change_processor.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/typed_url_data_type_controller.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/typed_url_model_associator.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_components_factory_impl.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h" 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/sync/sessions/session_data_type_controller.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_service.h" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/themes/theme_service_factory.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/themes/theme_syncable_service.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/webdata/autocomplete_syncable_service.h" 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/webdata/web_data_service_factory.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/common/chrome_version_info.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/autofill/core/browser/webdata/autofill_profile_syncable_service.h" 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata_service.h" 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/dom_distiller/core/dom_distiller_service.h" 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/password_manager/core/browser/password_store.h" 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/search_engines/template_url_service.h" 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/sync_driver/data_type_manager_impl.h" 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/sync_driver/data_type_manager_observer.h" 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/sync_driver/device_info_data_type_controller.h" 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/sync_driver/generic_change_processor.h" 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/sync_driver/proxy_data_type_controller.h" 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/sync_driver/shared_change_processor.h" 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/sync_driver/ui_data_type_controller.h" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "google_apis/gaia/oauth2_token_service_request.h" 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "sync/api/attachments/fake_attachment_store.h" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/syncable_service.h" 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "sync/internal_api/public/attachments/attachment_downloader.h" 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "sync/internal_api/public/attachments/attachment_service.h" 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "sync/internal_api/public/attachments/attachment_service_impl.h" 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "sync/internal_api/public/attachments/attachment_uploader_impl.h" 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(ENABLE_APP_LIST) 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/app_list/app_list_syncable_service.h" 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h" 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/app_list/app_list_switches.h" 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/api/storage/settings_sync_util.h" 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/api/synced_notifications_private/synced_notifications_shim.h" 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/extension_sync_service.h" 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS) 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_settings_service.h" 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h" 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_shared_settings_service.h" 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_shared_settings_service_factory.h" 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/supervised_user/supervised_user_sync_data_type_controller.h" 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_sync_service.h" 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_sync_service_factory.h" 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_factory.h" 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/spellchecker/spellcheck_service.h" 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::AutofillDataTypeController; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::AutofillProfileDataTypeController; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::BookmarkChangeProcessor; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::BookmarkDataTypeController; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::BookmarkModelAssociator; 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using browser_sync::ChromeReportUnrecoverableError; 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing browser_sync::ExtensionBackedDataTypeController; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::ExtensionDataTypeController; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::ExtensionSettingDataTypeController; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing browser_sync::HistoryDeleteDirectivesDataTypeController; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::PasswordDataTypeController; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::SearchEngineDataTypeController; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::SessionDataTypeController; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::SyncBackendHost; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::ThemeDataTypeController; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::TypedUrlChangeProcessor; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::TypedUrlDataTypeController; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using browser_sync::TypedUrlModelAssociator; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::DataTypeController; 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::DataTypeErrorHandler; 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::DataTypeManager; 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::DataTypeManagerImpl; 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::DataTypeManagerObserver; 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing sync_driver::DeviceInfoDataTypeController; 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::ProxyDataTypeController; 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::SharedChangeProcessor; 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using sync_driver::UIDataTypeController; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace { 13223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 13323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)syncer::ModelTypeSet GetDisabledTypesFromCommandLine( 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& command_line) { 13523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) syncer::ModelTypeSet disabled_types; 13623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string disabled_types_str = 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_line.GetSwitchValueASCII(switches::kDisableSyncTypes); 13823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) disabled_types = syncer::ModelTypeSetFromString(disabled_types_str); 13923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return disabled_types; 14023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 14123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)syncer::ModelTypeSet GetEnabledTypesFromCommandLine( 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const CommandLine& command_line) { 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) syncer::ModelTypeSet enabled_types; 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableSyncSyncedNotifications)) { 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) enabled_types.Put(syncer::SYNCED_NOTIFICATIONS); 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return enabled_types; 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 15123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace 15223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncComponentsFactoryImpl::ProfileSyncComponentsFactoryImpl( 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile* profile, 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandLine* command_line, 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const GURL& sync_service_url, 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OAuth2TokenService* token_service, 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::URLRequestContextGetter* url_request_context_getter) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : profile_(profile), 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_(command_line), 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) web_data_service_(WebDataServiceFactory::GetAutofillWebDataForProfile( 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_, Profile::EXPLICIT_ACCESS)), 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sync_service_url_(sync_service_url), 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) token_service_(token_service), 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) url_request_context_getter_(url_request_context_getter), 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) weak_factory_(this) { 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(token_service_); 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(url_request_context_getter_); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncComponentsFactoryImpl::~ProfileSyncComponentsFactoryImpl() { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileSyncComponentsFactoryImpl::RegisterDataTypes( 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService* pss) { 17623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) syncer::ModelTypeSet disabled_types = 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetDisabledTypesFromCommandLine(*command_line_); 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) syncer::ModelTypeSet enabled_types = 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetEnabledTypesFromCommandLine(*command_line_); 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RegisterCommonDataTypes(disabled_types, enabled_types, pss); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_ANDROID) 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) RegisterDesktopDataTypes(disabled_types, enabled_types, pss); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes( 18723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) syncer::ModelTypeSet disabled_types, 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) syncer::ModelTypeSet enabled_types, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService* pss) { 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(stanisc): can DEVICE_INFO be one of disabled datatypes? 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pss->RegisterDataTypeController(new DeviceInfoDataTypeController( 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&ChromeReportUnrecoverableError), 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this, 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pss->GetLocalDeviceInfoProvider())); 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Autofill sync is enabled by default. Register unless explicitly 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // disabled. 19923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::AUTOFILL)) { 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pss->RegisterDataTypeController( 2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new AutofillDataTypeController(this, profile_)); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Autofill profile sync is enabled by default. Register unless explicitly 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // disabled. 20623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::AUTOFILL_PROFILE)) { 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pss->RegisterDataTypeController( 2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new AutofillProfileDataTypeController(this, profile_)); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bookmark sync is enabled by default. Register unless explicitly 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled. 21323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::BOOKMARKS)) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->RegisterDataTypeController( 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new BookmarkDataTypeController(this, profile_, pss)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const bool history_disabled = 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->GetPrefs()->GetBoolean(prefs::kSavingBrowserHistoryDisabled); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TypedUrl sync is enabled by default. Register unless explicitly disabled, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or if saving history is disabled. 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!disabled_types.Has(syncer::TYPED_URLS) && !history_disabled) { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->RegisterDataTypeController( 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TypedUrlDataTypeController(this, profile_, pss)); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Delete directive sync is enabled by default. Register unless full history 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // sync is disabled. 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!disabled_types.Has(syncer::HISTORY_DELETE_DIRECTIVES) && 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !history_disabled) { 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pss->RegisterDataTypeController( 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new HistoryDeleteDirectivesDataTypeController(this, pss)); 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Session sync is enabled by default. Register unless explicitly disabled. 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This is also disabled if the browser history is disabled, because the 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // tab sync data is added to the web history on the server. 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!disabled_types.Has(syncer::PROXY_TABS) && !history_disabled) { 2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) pss->RegisterDataTypeController(new ProxyDataTypeController( 2406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 2416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) syncer::PROXY_TABS)); 24223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pss->RegisterDataTypeController( 2436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new SessionDataTypeController(this, 2446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) profile_, 2456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) pss->GetSyncedWindowDelegatesGetter(), 2466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) pss->GetLocalDeviceInfoProvider())); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Favicon sync is enabled by default. Register unless explicitly disabled. 25023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::FAVICON_IMAGES) && 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !disabled_types.Has(syncer::FAVICON_TRACKING) && 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci !history_disabled) { 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // crbug/384552. We disable error uploading for this data types for now. 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pss->RegisterDataTypeController( 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new UIDataTypeController( 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Closure(), 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) syncer::FAVICON_IMAGES, 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this)); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pss->RegisterDataTypeController( 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new UIDataTypeController( 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Closure(), 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) syncer::FAVICON_TRACKING, 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this)); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Password sync is enabled by default. Register unless explicitly 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // disabled. 27023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::PASSWORDS)) { 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pss->RegisterDataTypeController( 2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new PasswordDataTypeController(this, profile_)); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Article sync is disabled by default. Register only if explicitly enabled. 276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (IsEnableSyncArticlesSet()) { 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) pss->RegisterDataTypeController( 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new UIDataTypeController( 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&ChromeReportUnrecoverableError), 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) syncer::ARTICLES, 282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this)); 2834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS) 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pss->RegisterDataTypeController( 287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new SupervisedUserSyncDataTypeController( 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch syncer::SUPERVISED_USER_SETTINGS, 289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this, 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_)); 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileSyncComponentsFactoryImpl::RegisterDesktopDataTypes( 29523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) syncer::ModelTypeSet disabled_types, 296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) syncer::ModelTypeSet enabled_types, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService* pss) { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // App sync is enabled by default. Register unless explicitly 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled. 30023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::APPS)) { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->RegisterDataTypeController( 3026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new ExtensionDataTypeController(syncer::APPS, this, profile_)); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension sync is enabled by default. Register unless explicitly 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled. 30723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::EXTENSIONS)) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->RegisterDataTypeController( 3096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new ExtensionDataTypeController(syncer::EXTENSIONS, this, profile_)); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Preference sync is enabled by default. Register unless explicitly 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled. 31423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::PREFERENCES)) { 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->RegisterDataTypeController( 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new UIDataTypeController( 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&ChromeReportUnrecoverableError), 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) syncer::PREFERENCES, 320f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this)); 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::PRIORITY_PREFERENCES)) { 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pss->RegisterDataTypeController( 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new UIDataTypeController( 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&ChromeReportUnrecoverableError), 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) syncer::PRIORITY_PREFERENCES, 329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this)); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_THEMES) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Theme sync is enabled by default. Register unless explicitly disabled. 33423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::THEMES)) { 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->RegisterDataTypeController( 3366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new ThemeDataTypeController(this, profile_)); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Search Engine sync is enabled by default. Register unless explicitly 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled. 34223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::SEARCH_ENGINES)) { 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->RegisterDataTypeController( 3446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new SearchEngineDataTypeController(this, profile_)); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extension setting sync is enabled by default. Register unless explicitly 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled. 34923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::EXTENSION_SETTINGS)) { 3506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) pss->RegisterDataTypeController(new ExtensionSettingDataTypeController( 3516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) syncer::EXTENSION_SETTINGS, this, profile_)); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // App setting sync is enabled by default. Register unless explicitly 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disabled. 35623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::APP_SETTINGS)) { 3576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) pss->RegisterDataTypeController(new ExtensionSettingDataTypeController( 3586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) syncer::APP_SETTINGS, this, profile_)); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ENABLE_APP_LIST) 362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (app_list::switches::IsAppListSyncEnabled()) { 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) pss->RegisterDataTypeController( 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new UIDataTypeController( 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&ChromeReportUnrecoverableError), 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) syncer::APP_LIST, 368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this)); 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 372f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Synced Notifications are disabled by default. 373f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) && defined(ENABLE_NOTIFICATIONS) 374f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (enabled_types.Has(syncer::SYNCED_NOTIFICATIONS)) { 37523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) pss->RegisterDataTypeController( 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new ExtensionBackedDataTypeController( 37723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) syncer::SYNCED_NOTIFICATIONS, 378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "", // TODO(dewittj): pass the extension hash here. 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this, 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_)); 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pss->RegisterDataTypeController( 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new ExtensionBackedDataTypeController( 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch syncer::SYNCED_NOTIFICATION_APP_INFO, 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "", // TODO(dewittj): pass the extension hash here. 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this, 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_)); 388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 389f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_CHROMEOS) 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Dictionary sync is enabled by default. 39323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (!disabled_types.Has(syncer::DICTIONARY)) { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pss->RegisterDataTypeController( 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new UIDataTypeController( 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&ChromeReportUnrecoverableError), 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) syncer::DICTIONARY, 399f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this)); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_MANAGED_USERS) 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pss->RegisterDataTypeController( 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new SupervisedUserSyncDataTypeController( 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci syncer::SUPERVISED_USERS, 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this, 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_)); 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci pss->RegisterDataTypeController( 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new SupervisedUserSyncDataTypeController( 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci syncer::SUPERVISED_USER_SHARED_SETTINGS, 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this, 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_)); 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DataTypeManager* ProfileSyncComponentsFactoryImpl::CreateDataTypeManager( 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) debug_info_listener, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DataTypeController::TypeMap* controllers, 4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const sync_driver::DataTypeEncryptionHandler* encryption_handler, 422868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SyncBackendHost* backend, 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DataTypeManagerObserver* observer) { 424cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return new DataTypeManagerImpl(base::Bind(ChromeReportUnrecoverableError), 425cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) debug_info_listener, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controllers, 427868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) encryption_handler, 428868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) backend, 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci observer); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)browser_sync::SyncBackendHost* 43323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)ProfileSyncComponentsFactoryImpl::CreateSyncBackendHost( 43423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const std::string& name, 43523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) Profile* profile, 436cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) invalidation::InvalidationService* invalidator, 437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs, 438cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::FilePath& sync_folder) { 439cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return new browser_sync::SyncBackendHostImpl(name, profile, invalidator, 440cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) sync_prefs, sync_folder); 441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciscoped_ptr<sync_driver::LocalDeviceInfoProvider> 4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)ProfileSyncComponentsFactoryImpl::CreateLocalDeviceInfoProvider() { 4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return scoped_ptr<sync_driver::LocalDeviceInfoProvider>( 4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new browser_sync::LocalDeviceInfoProviderImpl()); 4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::WeakPtr<syncer::SyncableService> ProfileSyncComponentsFactoryImpl:: 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSyncableServiceForType(syncer::ModelType type) { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!profile_) { // For tests. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::WeakPtr<syncer::SyncableService>(); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case syncer::DEVICE_INFO: 4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ProfileSyncServiceFactory::GetForProfile(profile_) 4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetDeviceInfoSyncableService() 4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->AsWeakPtr(); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::PREFERENCES: 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PrefServiceSyncable::FromProfile( 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_)->GetSyncableService(syncer::PREFERENCES)->AsWeakPtr(); 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case syncer::PRIORITY_PREFERENCES: 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return PrefServiceSyncable::FromProfile(profile_)->GetSyncableService( 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) syncer::PRIORITY_PREFERENCES)->AsWeakPtr(); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::AUTOFILL: 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::AUTOFILL_PROFILE: { 467868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!web_data_service_.get()) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::WeakPtr<syncer::SyncableService>(); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == syncer::AUTOFILL) { 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return AutocompleteSyncableService::FromWebDataService( 471868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_data_service_.get())->AsWeakPtr(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return autofill::AutofillProfileSyncableService::FromWebDataService( 474868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_data_service_.get())->AsWeakPtr(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 477a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case syncer::SEARCH_ENGINES: 478a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return TemplateURLServiceFactory::GetForProfile(profile_)->AsWeakPtr(); 479a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::APPS: 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::EXTENSIONS: 4821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return ExtensionSyncService::Get(profile_)->AsWeakPtr(); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::APP_SETTINGS: 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::EXTENSION_SETTINGS: 485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return extensions::settings_sync_util::GetSyncableService(profile_, type) 486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ->AsWeakPtr(); 487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 4885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(ENABLE_APP_LIST) 4895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case syncer::APP_LIST: 4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return app_list::AppListSyncableServiceFactory::GetForProfile(profile_)-> 4915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AsWeakPtr(); 4925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_THEMES) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::THEMES: 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ThemeServiceFactory::GetForProfile(profile_)-> 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetThemeSyncableService()->AsWeakPtr(); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case syncer::HISTORY_DELETE_DIRECTIVES: { 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryService* history = 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HistoryServiceFactory::GetForProfile( 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_, Profile::EXPLICIT_ACCESS); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return history ? history->AsWeakPtr() : base::WeakPtr<HistoryService>(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 504f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 505f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case syncer::SYNCED_NOTIFICATIONS: 506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case syncer::SYNCED_NOTIFICATION_APP_INFO: { 507f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return notifier::ChromeNotifierServiceFactory::GetForProfile( 508f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_, Profile::IMPLICIT_ACCESS) 509f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ->GetSyncedNotificationsShim() 510f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ->AsWeakPtr(); 511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 513a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK) 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case syncer::DICTIONARY: 515d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return SpellcheckServiceFactory::GetForContext(profile_)-> 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCustomDictionary()->AsWeakPtr(); 517a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case syncer::FAVICON_IMAGES: 5197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch case syncer::FAVICON_TRACKING: { 520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser_sync::FaviconCache* favicons = 5217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ProfileSyncServiceFactory::GetForProfile(profile_)-> 522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetFaviconCache(); 523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return favicons ? favicons->AsWeakPtr() 524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : base::WeakPtr<syncer::SyncableService>(); 5257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 52690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(ENABLE_MANAGED_USERS) 527f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case syncer::SUPERVISED_USER_SETTINGS: 528f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return SupervisedUserSettingsServiceFactory::GetForProfile(profile_)-> 52958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AsWeakPtr(); 530f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case syncer::SUPERVISED_USERS: 531f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return SupervisedUserSyncServiceFactory::GetForProfile(profile_)-> 532868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AsWeakPtr(); 533f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case syncer::SUPERVISED_USER_SHARED_SETTINGS: 534f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext( 5355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_)->AsWeakPtr(); 53690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case syncer::ARTICLES: { 538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dom_distiller::DomDistillerService* service = 539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dom_distiller::DomDistillerServiceFactory::GetForBrowserContext( 540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_); 541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (service) 542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return service->GetSyncableService()->AsWeakPtr(); 5434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return base::WeakPtr<syncer::SyncableService>(); 544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case syncer::SESSIONS: { 546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return ProfileSyncServiceFactory::GetForProfile(profile_)-> 547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetSessionsSyncableService()->AsWeakPtr(); 548f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case syncer::PASSWORDS: { 550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(PASSWORD_MANAGER_ENABLE_SYNC) 5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<password_manager::PasswordStore> password_store = 552c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PasswordStoreFactory::GetForProfile(profile_, 553c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Profile::EXPLICIT_ACCESS); 5541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return password_store.get() ? password_store->GetPasswordSyncableService() 5551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : base::WeakPtr<syncer::SyncableService>(); 556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else 557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return base::WeakPtr<syncer::SyncableService>(); 558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif 559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The following datatypes still need to be transitioned to the 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // syncer::SyncableService API: 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bookmarks 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Typed URLs 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::WeakPtr<syncer::SyncableService>(); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 570f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class TokenServiceProvider 571f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : public OAuth2TokenServiceRequest::TokenServiceProvider { 572f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 573f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TokenServiceProvider( 574f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OAuth2TokenService* token_service); 576f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 577f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // OAuth2TokenServiceRequest::TokenServiceProvider implementation. 578f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual scoped_refptr<base::SingleThreadTaskRunner> 579f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetTokenServiceTaskRunner() OVERRIDE; 580f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual OAuth2TokenService* GetTokenService() OVERRIDE; 581f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 582f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 5836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~TokenServiceProvider(); 5846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 585f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OAuth2TokenService* token_service_; 587f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 588f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 589f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TokenServiceProvider::TokenServiceProvider( 590f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 591f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) OAuth2TokenService* token_service) 592f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : task_runner_(task_runner), token_service_(token_service) { 593f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 594f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 595f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TokenServiceProvider::~TokenServiceProvider() { 596f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 597f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 598f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)scoped_refptr<base::SingleThreadTaskRunner> 599f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TokenServiceProvider::GetTokenServiceTaskRunner() { 600f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return task_runner_; 601f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 602f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 603f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)OAuth2TokenService* TokenServiceProvider::GetTokenService() { 604f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return token_service_; 605f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 606f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 607cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)scoped_ptr<syncer::AttachmentService> 608cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ProfileSyncComponentsFactoryImpl::CreateAttachmentService( 6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<syncer::AttachmentStore>& attachment_store, 610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const syncer::UserShare& user_share, 611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) syncer::AttachmentService::Delegate* delegate) { 612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<syncer::AttachmentUploader> attachment_uploader; 613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<syncer::AttachmentDownloader> attachment_downloader; 614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Only construct an AttachmentUploader and AttachmentDownload if we have sync 615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // credentials. We may not have sync credentials because there may not be a 616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // signed in sync user (e.g. sync is running in "backup" mode). 617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!user_share.sync_credentials.email.empty() && 618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch !user_share.sync_credentials.scope_set.empty()) { 6196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<OAuth2TokenServiceRequest::TokenServiceProvider> 620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service_provider(new TokenServiceProvider( 621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserThread::GetMessageLoopProxyForThread( 622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserThread::UI), 623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch token_service_)); 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(maniscalco): Use shared (one per profile) thread-safe instances of 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // AttachmentUploader and AttachmentDownloader instead of creating a new one 626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // per AttachmentService (bug 369536). 627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch attachment_uploader.reset(new syncer::AttachmentUploaderImpl( 628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sync_service_url_, 629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url_request_context_getter_, 630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_share.sync_credentials.email, 631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_share.sync_credentials.scope_set, 6326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) token_service_provider)); 633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) token_service_provider = new TokenServiceProvider( 635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserThread::GetMessageLoopProxyForThread( 636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::BrowserThread::UI), 6376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) token_service_); 638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch attachment_downloader = syncer::AttachmentDownloader::Create( 639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sync_service_url_, 640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url_request_context_getter_, 641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_share.sync_credentials.email, 642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch user_share.sync_credentials.scope_set, 6436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) token_service_provider); 644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // It is important that the initial backoff delay is relatively large. For 6471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // whatever reason, the server may fail all requests for a short period of 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // time. When this happens we don't want to overwhelm the server with 6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // requests so we use a large initial backoff. 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::TimeDelta initial_backoff_delay = 6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta::FromMinutes(30); 6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::TimeDelta max_backoff_delay = base::TimeDelta::FromHours(4); 653cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<syncer::AttachmentService> attachment_service( 6541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new syncer::AttachmentServiceImpl(attachment_store, 65546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) attachment_uploader.Pass(), 65646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) attachment_downloader.Pass(), 6571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate, 6581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci initial_backoff_delay, 6591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci max_backoff_delay)); 660cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return attachment_service.Pass(); 6610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 6620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncComponentsFactory::SyncComponents 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncComponentsFactoryImpl::CreateBookmarkSyncComponents( 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService* profile_sync_service, 6665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_driver::DataTypeErrorHandler* error_handler) { 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* bookmark_model = 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModelFactory::GetForProfile(profile_sync_service->profile()); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::UserShare* user_share = profile_sync_service->GetUserShare(); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(akalin): We may want to propagate this switch up eventually. 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool kExpectMobileBookmarksFolder = true; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool kExpectMobileBookmarksFolder = false; 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModelAssociator* model_associator = 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new BookmarkModelAssociator(bookmark_model, 678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_sync_service->profile(), 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_share, 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_handler, 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kExpectMobileBookmarksFolder); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkChangeProcessor* change_processor = 6830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new BookmarkChangeProcessor(profile_sync_service->profile(), 6840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch model_associator, 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_handler); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SyncComponents(model_associator, change_processor); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileSyncComponentsFactory::SyncComponents 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncComponentsFactoryImpl::CreateTypedUrlSyncComponents( 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileSyncService* profile_sync_service, 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history::HistoryBackend* history_backend, 6935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_driver::DataTypeErrorHandler* error_handler) { 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TypedUrlModelAssociator* model_associator = 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TypedUrlModelAssociator(profile_sync_service, 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_backend, 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_handler); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TypedUrlChangeProcessor* change_processor = 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TypedUrlChangeProcessor(profile_, 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_associator, 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) history_backend, 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_handler); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SyncComponents(model_associator, change_processor); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705