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

Unified Diff: chrome/browser/extensions/settings/settings_backend.cc

Issue 8539037: Extension Settings API: make it so that when changes received from Sync fail to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: disable all sync, not just outgoing Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/settings/settings_backend.cc
diff --git a/chrome/browser/extensions/settings/settings_backend.cc b/chrome/browser/extensions/settings/settings_backend.cc
index d56a7d3d513fb8c7c462e9c08745b19c5f3a23f1..2a6fee5f2e7c91532d65d37c5eef0a0ccbd80811 100644
--- a/chrome/browser/extensions/settings/settings_backend.cc
+++ b/chrome/browser/extensions/settings/settings_backend.cc
@@ -87,13 +87,16 @@ SettingsBackend::GetOrCreateStorageWithSyncData(
observers_,
extension_id,
storage));
+ storage_objs_[extension_id] = syncable_storage;
+
if (sync_processor_) {
- // TODO(kalman): do something if StartSyncing fails.
- ignore_result(syncable_storage->StartSyncing(
- sync_type_, sync_data, sync_processor_));
+ SyncError error =
+ syncable_storage->StartSyncing(sync_type_, sync_data, sync_processor_);
+ if (error.IsSet()) {
+ DisableSyncForExtension(extension_id);
+ }
}
- storage_objs_[extension_id] = syncable_storage;
return syncable_storage.get();
}
@@ -140,6 +143,13 @@ std::set<std::string> SettingsBackend::GetKnownExtensionIDs() const {
return result;
}
+void SettingsBackend::DisableSyncForExtension(
+ const std::string& extension_id) const {
+ linked_ptr<SyncableSettingsStorage> storage = storage_objs_[extension_id];
+ DCHECK(storage.get());
+ storage->StopSyncing();
+}
+
static void AddAllSyncData(
const std::string& extension_id,
const DictionaryValue& src,
@@ -165,8 +175,7 @@ SyncDataList SettingsBackend::GetAllSyncData(
for (std::set<std::string>::const_iterator it = known_extension_ids.begin();
it != known_extension_ids.end(); ++it) {
- SettingsStorage::ReadResult maybe_settings =
- GetStorage(*it)->Get();
+ SettingsStorage::ReadResult maybe_settings = GetStorage(*it)->Get();
if (maybe_settings.HasError()) {
LOG(WARNING) << "Failed to get settings for " << *it << ": " <<
maybe_settings.error();
@@ -213,16 +222,17 @@ SyncError SettingsBackend::MergeDataAndStartSyncing(
it != storage_objs_.end(); ++it) {
std::map<std::string, linked_ptr<DictionaryValue> >::iterator
maybe_sync_data = grouped_sync_data.find(it->first);
+ SyncError error;
if (maybe_sync_data != grouped_sync_data.end()) {
- // TODO(kalman): do something if StartSyncing fails.
- ignore_result(
- it->second->StartSyncing(
- type, *maybe_sync_data->second, sync_processor));
+ error = it->second->StartSyncing(
+ type, *maybe_sync_data->second, sync_processor);
grouped_sync_data.erase(it->first);
} else {
DictionaryValue empty;
- // TODO(kalman): do something if StartSyncing fails.
- ignore_result(it->second->StartSyncing(type, empty, sync_processor));
+ error = it->second->StartSyncing(type, empty, sync_processor);
+ }
+ if (error.IsSet()) {
+ DisableSyncForExtension(it->first);
}
}
@@ -255,10 +265,12 @@ SyncError SettingsBackend::ProcessSyncChanges(
DictionaryValue empty;
for (std::map<std::string, SettingSyncDataList>::iterator
it = grouped_sync_data.begin(); it != grouped_sync_data.end(); ++it) {
- // TODO(kalman): do something if ProcessSyncChanges fails.
- ignore_result(
+ SyncError error =
GetOrCreateStorageWithSyncData(it->first, empty)->
- ProcessSyncChanges(it->second));
+ ProcessSyncChanges(it->second);
+ if (error.IsSet()) {
+ DisableSyncForExtension(it->first);
+ }
}
return SyncError();
@@ -276,6 +288,8 @@ void SettingsBackend::StopSyncing(syncable::ModelType type) {
for (StorageObjMap::iterator it = storage_objs_.begin();
it != storage_objs_.end(); ++it) {
+ // Some storage areas may have already stopped syncing if they had areas
+ // and syncing was disabled, but StopSyncing is safe to call multiple times.
it->second->StopSyncing();
}
}

Powered by Google App Engine
This is Rietveld 408576698