Index: trunk/src/chrome/browser/sync/profile_sync_components_factory_impl.cc |
=================================================================== |
--- trunk/src/chrome/browser/sync/profile_sync_components_factory_impl.cc (revision 289111) |
+++ trunk/src/chrome/browser/sync/profile_sync_components_factory_impl.cc (working copy) |
@@ -179,6 +179,24 @@ |
#endif |
} |
+void ProfileSyncComponentsFactoryImpl::DisableBrokenType( |
+ syncer::ModelType type, |
+ const tracked_objects::Location& from_here, |
+ const std::string& message) { |
+ ProfileSyncService* p = ProfileSyncServiceFactory::GetForProfile(profile_); |
+ syncer::SyncError error( |
+ from_here, syncer::SyncError::DATATYPE_ERROR, message, type); |
+ p->DisableDatatype(error); |
+} |
+ |
+DataTypeController::DisableTypeCallback |
+ProfileSyncComponentsFactoryImpl::MakeDisableCallbackFor( |
+ syncer::ModelType type) { |
+ return base::Bind(&ProfileSyncComponentsFactoryImpl::DisableBrokenType, |
+ weak_factory_.GetWeakPtr(), |
+ type); |
+} |
+ |
void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes( |
syncer::ModelTypeSet disabled_types, |
syncer::ModelTypeSet enabled_types, |
@@ -187,14 +205,16 @@ |
// disabled. |
if (!disabled_types.Has(syncer::AUTOFILL)) { |
pss->RegisterDataTypeController( |
- new AutofillDataTypeController(this, profile_)); |
+ new AutofillDataTypeController( |
+ this, profile_, MakeDisableCallbackFor(syncer::AUTOFILL))); |
} |
// Autofill profile sync is enabled by default. Register unless explicitly |
// disabled. |
if (!disabled_types.Has(syncer::AUTOFILL_PROFILE)) { |
pss->RegisterDataTypeController( |
- new AutofillProfileDataTypeController(this, profile_)); |
+ new AutofillProfileDataTypeController( |
+ this, profile_, MakeDisableCallbackFor(syncer::AUTOFILL_PROFILE))); |
} |
// Bookmark sync is enabled by default. Register unless explicitly |
@@ -219,20 +239,23 @@ |
new UIDataTypeController( |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
base::Bind(&ChromeReportUnrecoverableError), |
+ MakeDisableCallbackFor(syncer::HISTORY_DELETE_DIRECTIVES), |
syncer::HISTORY_DELETE_DIRECTIVES, |
this)); |
} |
// Session sync is enabled by default. Register unless explicitly disabled. |
if (!disabled_types.Has(syncer::PROXY_TABS)) { |
- pss->RegisterDataTypeController(new ProxyDataTypeController( |
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
- syncer::PROXY_TABS)); |
+ pss->RegisterDataTypeController(new ProxyDataTypeController( |
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
+ syncer::PROXY_TABS)); |
pss->RegisterDataTypeController( |
- new SessionDataTypeController(this, |
- profile_, |
- pss->GetSyncedWindowDelegatesGetter(), |
- pss->GetLocalDeviceInfoProvider())); |
+ new SessionDataTypeController( |
+ this, |
+ profile_, |
+ pss->GetSyncedWindowDelegatesGetter(), |
+ pss->GetLocalDeviceInfoProvider(), |
+ MakeDisableCallbackFor(syncer::SESSIONS))); |
} |
// Favicon sync is enabled by default. Register unless explicitly disabled. |
@@ -242,12 +265,14 @@ |
new UIDataTypeController( |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
base::Bind(&ChromeReportUnrecoverableError), |
+ MakeDisableCallbackFor(syncer::FAVICON_IMAGES), |
syncer::FAVICON_IMAGES, |
this)); |
pss->RegisterDataTypeController( |
new UIDataTypeController( |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
base::Bind(&ChromeReportUnrecoverableError), |
+ MakeDisableCallbackFor(syncer::FAVICON_TRACKING), |
syncer::FAVICON_TRACKING, |
this)); |
} |
@@ -256,7 +281,8 @@ |
// disabled. |
if (!disabled_types.Has(syncer::PASSWORDS)) { |
pss->RegisterDataTypeController( |
- new PasswordDataTypeController(this, profile_)); |
+ new PasswordDataTypeController( |
+ this, profile_, MakeDisableCallbackFor(syncer::PASSWORDS))); |
} |
// Article sync is disabled by default. Register only if explicitly enabled. |
@@ -265,6 +291,7 @@ |
new UIDataTypeController( |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
base::Bind(&ChromeReportUnrecoverableError), |
+ MakeDisableCallbackFor(syncer::ARTICLES), |
syncer::ARTICLES, |
this)); |
} |
@@ -272,16 +299,19 @@ |
#if defined(ENABLE_MANAGED_USERS) |
pss->RegisterDataTypeController( |
new SupervisedUserSyncDataTypeController( |
+ MakeDisableCallbackFor(syncer::SUPERVISED_USER_SETTINGS), |
syncer::SUPERVISED_USER_SETTINGS, |
this, |
profile_)); |
pss->RegisterDataTypeController( |
new SupervisedUserSyncDataTypeController( |
+ MakeDisableCallbackFor(syncer::SUPERVISED_USERS), |
syncer::SUPERVISED_USERS, |
this, |
profile_)); |
pss->RegisterDataTypeController( |
new SupervisedUserSyncDataTypeController( |
+ MakeDisableCallbackFor(syncer::SUPERVISED_USER_SHARED_SETTINGS), |
syncer::SUPERVISED_USER_SHARED_SETTINGS, |
this, |
profile_)); |
@@ -296,14 +326,17 @@ |
// disabled. |
if (!disabled_types.Has(syncer::APPS)) { |
pss->RegisterDataTypeController( |
- new ExtensionDataTypeController(syncer::APPS, this, profile_)); |
+ new ExtensionDataTypeController(syncer::APPS, this, profile_, |
+ MakeDisableCallbackFor(syncer::APPS))); |
} |
// Extension sync is enabled by default. Register unless explicitly |
// disabled. |
if (!disabled_types.Has(syncer::EXTENSIONS)) { |
pss->RegisterDataTypeController( |
- new ExtensionDataTypeController(syncer::EXTENSIONS, this, profile_)); |
+ new ExtensionDataTypeController( |
+ syncer::EXTENSIONS, this, profile_, |
+ MakeDisableCallbackFor(syncer::EXTENSIONS))); |
} |
// Preference sync is enabled by default. Register unless explicitly |
@@ -313,6 +346,7 @@ |
new UIDataTypeController( |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
base::Bind(&ChromeReportUnrecoverableError), |
+ MakeDisableCallbackFor(syncer::PREFERENCES), |
syncer::PREFERENCES, |
this)); |
} |
@@ -322,6 +356,7 @@ |
new UIDataTypeController( |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
base::Bind(&ChromeReportUnrecoverableError), |
+ MakeDisableCallbackFor(syncer::PRIORITY_PREFERENCES), |
syncer::PRIORITY_PREFERENCES, |
this)); |
} |
@@ -330,7 +365,8 @@ |
// Theme sync is enabled by default. Register unless explicitly disabled. |
if (!disabled_types.Has(syncer::THEMES)) { |
pss->RegisterDataTypeController( |
- new ThemeDataTypeController(this, profile_)); |
+ new ThemeDataTypeController(this, profile_, |
+ MakeDisableCallbackFor(syncer::THEMES))); |
} |
#endif |
@@ -338,21 +374,26 @@ |
// disabled. |
if (!disabled_types.Has(syncer::SEARCH_ENGINES)) { |
pss->RegisterDataTypeController( |
- new SearchEngineDataTypeController(this, profile_)); |
+ new SearchEngineDataTypeController( |
+ this, profile_, MakeDisableCallbackFor(syncer::SEARCH_ENGINES))); |
} |
// Extension setting sync is enabled by default. Register unless explicitly |
// disabled. |
if (!disabled_types.Has(syncer::EXTENSION_SETTINGS)) { |
- pss->RegisterDataTypeController(new ExtensionSettingDataTypeController( |
- syncer::EXTENSION_SETTINGS, this, profile_)); |
+ pss->RegisterDataTypeController( |
+ new ExtensionSettingDataTypeController( |
+ syncer::EXTENSION_SETTINGS, this, profile_, |
+ MakeDisableCallbackFor(syncer::EXTENSION_SETTINGS))); |
} |
// App setting sync is enabled by default. Register unless explicitly |
// disabled. |
if (!disabled_types.Has(syncer::APP_SETTINGS)) { |
- pss->RegisterDataTypeController(new ExtensionSettingDataTypeController( |
- syncer::APP_SETTINGS, this, profile_)); |
+ pss->RegisterDataTypeController( |
+ new ExtensionSettingDataTypeController( |
+ syncer::APP_SETTINGS, this, profile_, |
+ MakeDisableCallbackFor(syncer::APP_SETTINGS))); |
} |
#if defined(ENABLE_APP_LIST) |
@@ -361,6 +402,7 @@ |
new UIDataTypeController( |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
base::Bind(&ChromeReportUnrecoverableError), |
+ MakeDisableCallbackFor(syncer::APP_LIST), |
syncer::APP_LIST, |
this)); |
} |
@@ -371,6 +413,7 @@ |
if (enabled_types.Has(syncer::SYNCED_NOTIFICATIONS)) { |
pss->RegisterDataTypeController( |
new ExtensionBackedDataTypeController( |
+ MakeDisableCallbackFor(syncer::SYNCED_NOTIFICATIONS), |
syncer::SYNCED_NOTIFICATIONS, |
"", // TODO(dewittj): pass the extension hash here. |
this, |
@@ -378,6 +421,7 @@ |
pss->RegisterDataTypeController( |
new ExtensionBackedDataTypeController( |
+ MakeDisableCallbackFor(syncer::SYNCED_NOTIFICATION_APP_INFO), |
syncer::SYNCED_NOTIFICATION_APP_INFO, |
"", // TODO(dewittj): pass the extension hash here. |
this, |
@@ -392,6 +436,7 @@ |
new UIDataTypeController( |
BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI), |
base::Bind(&ChromeReportUnrecoverableError), |
+ MakeDisableCallbackFor(syncer::DICTIONARY), |
syncer::DICTIONARY, |
this)); |
} |