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