| Index: chrome/browser/extensions/settings/syncable_settings_storage.cc
|
| diff --git a/chrome/browser/extensions/settings/syncable_settings_storage.cc b/chrome/browser/extensions/settings/syncable_settings_storage.cc
|
| index 243f653f30cf37bf609d52393bfc516a7236fa83..799b6b092a03fdaa2c5ba9152301e33e4328ea24 100644
|
| --- a/chrome/browser/extensions/settings/syncable_settings_storage.cc
|
| +++ b/chrome/browser/extensions/settings/syncable_settings_storage.cc
|
| @@ -146,6 +146,8 @@ SyncError SyncableSettingsStorage::StartSyncing(
|
| SyncError SyncableSettingsStorage::SendLocalSettingsToSync(
|
| const DictionaryValue& settings) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| + DCHECK(sync_processor_);
|
| +
|
| SyncChangeList changes;
|
| for (DictionaryValue::key_iterator it = settings.begin_keys();
|
| it != settings.end_keys(); ++it) {
|
| @@ -161,6 +163,7 @@ SyncError SyncableSettingsStorage::SendLocalSettingsToSync(
|
|
|
| SyncError error = sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
|
| if (error.IsSet()) {
|
| + StopSyncing();
|
| return error;
|
| }
|
|
|
| @@ -222,32 +225,31 @@ SyncError SyncableSettingsStorage::OverwriteLocalSettingsWithSync(
|
| if (changes.empty()) {
|
| return SyncError();
|
| }
|
| -
|
| - std::vector<SyncError> sync_errors(ProcessSyncChanges(changes));
|
| - if (sync_errors.empty()) {
|
| - return SyncError();
|
| - }
|
| - // TODO(kalman): something sensible with multiple errors.
|
| - return sync_errors[0];
|
| + return ProcessSyncChanges(changes);
|
| }
|
|
|
| void SyncableSettingsStorage::StopSyncing() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| - DCHECK(sync_type_ == syncable::EXTENSION_SETTINGS ||
|
| - sync_type_ == syncable::APP_SETTINGS);
|
| - DCHECK(sync_processor_);
|
|
|
| + // Stop syncing is allowed to be called multiple times without StartSyncing,
|
| + // so don't DCHECK that these values aren't already disabled.
|
| sync_type_ = syncable::UNSPECIFIED;
|
| sync_processor_ = NULL;
|
| synced_keys_.clear();
|
| }
|
|
|
| -std::vector<SyncError> SyncableSettingsStorage::ProcessSyncChanges(
|
| +SyncError SyncableSettingsStorage::ProcessSyncChanges(
|
| const SettingSyncDataList& sync_changes) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| - DCHECK(sync_processor_);
|
| DCHECK(!sync_changes.empty()) << "No sync changes for " << extension_id_;
|
|
|
| + if (!sync_processor_) {
|
| + return SyncError(
|
| + FROM_HERE,
|
| + std::string("Sync is inactive for ") + extension_id_,
|
| + sync_type_);
|
| + }
|
| +
|
| std::vector<SyncError> errors;
|
| SettingChangeList changes;
|
|
|
| @@ -327,7 +329,8 @@ std::vector<SyncError> SyncableSettingsStorage::ProcessSyncChanges(
|
| extension_id_,
|
| SettingChange::GetEventJson(changes));
|
|
|
| - return errors;
|
| + // TODO(kalman): Something sensible with multiple errors.
|
| + return errors.empty() ? SyncError() : errors[0];
|
| }
|
|
|
| void SyncableSettingsStorage::SendChangesToSync(
|
| @@ -376,7 +379,7 @@ void SyncableSettingsStorage::SendChangesToSync(
|
| SyncError error =
|
| sync_processor_->ProcessSyncChanges(FROM_HERE, sync_changes);
|
| if (error.IsSet()) {
|
| - LOG(WARNING) << "Failed to send changes to sync: " << error.message();
|
| + StopSyncing();
|
| return;
|
| }
|
|
|
|
|