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 1ee4516dfc7008dcf25bab5dd8b4ce210ea64e9d..acc1cfb1af0a7eecccadc848408690711f6c435f 100644 |
--- a/chrome/browser/extensions/settings/settings_backend.cc |
+++ b/chrome/browser/extensions/settings/settings_backend.cc |
@@ -31,8 +31,7 @@ SettingsBackend::SettingsBackend( |
base_path_(base_path), |
quota_(quota), |
observers_(observers), |
- sync_type_(syncable::UNSPECIFIED), |
- sync_processor_(NULL) { |
+ sync_type_(syncable::UNSPECIFIED) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
} |
@@ -72,9 +71,11 @@ SyncableSettingsStorage* SettingsBackend::GetOrCreateStorageWithSyncData( |
storage)); |
storage_objs_[extension_id] = syncable_storage; |
- if (sync_processor_) { |
+ if (sync_processor_.get()) { |
SyncError error = |
- syncable_storage->StartSyncing(sync_type_, sync_data, sync_processor_); |
+ syncable_storage->StartSyncing(sync_type_, |
+ sync_data, |
+ sync_processor_.get()); |
if (error.IsSet()) { |
syncable_storage.get()->StopSyncing(); |
} |
@@ -171,15 +172,16 @@ SyncDataList SettingsBackend::GetAllSyncData( |
SyncError SettingsBackend::MergeDataAndStartSyncing( |
syncable::ModelType type, |
const SyncDataList& initial_sync_data, |
- SyncChangeProcessor* sync_processor) { |
+ scoped_ptr<SyncChangeProcessor> sync_processor) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
DCHECK(type == syncable::EXTENSION_SETTINGS || |
type == syncable::APP_SETTINGS); |
DCHECK_EQ(sync_type_, syncable::UNSPECIFIED); |
- DCHECK(!sync_processor_); |
+ DCHECK(!sync_processor_.get()); |
+ DCHECK(sync_processor.get()); |
sync_type_ = type; |
- sync_processor_ = sync_processor; |
+ sync_processor_ = sync_processor.Pass(); |
// Group the initial sync data by extension id. |
std::map<std::string, linked_ptr<DictionaryValue> > grouped_sync_data; |
@@ -206,11 +208,11 @@ SyncError SettingsBackend::MergeDataAndStartSyncing( |
SyncError error; |
if (maybe_sync_data != grouped_sync_data.end()) { |
error = it->second->StartSyncing( |
- type, *maybe_sync_data->second, sync_processor); |
+ type, *maybe_sync_data->second, sync_processor_.get()); |
grouped_sync_data.erase(it->first); |
} else { |
DictionaryValue empty; |
- error = it->second->StartSyncing(type, empty, sync_processor); |
+ error = it->second->StartSyncing(type, empty, sync_processor_.get()); |
} |
if (error.IsSet()) { |
it->second->StopSyncing(); |
@@ -232,7 +234,7 @@ SyncError SettingsBackend::ProcessSyncChanges( |
const tracked_objects::Location& from_here, |
const SyncChangeList& sync_changes) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
- DCHECK(sync_processor_); |
+ DCHECK(sync_processor_.get()); |
// Group changes by extension, to pass all changes in a single method call. |
std::map<std::string, SettingSyncDataList> grouped_sync_data; |
@@ -261,10 +263,6 @@ void SettingsBackend::StopSyncing(syncable::ModelType type) { |
DCHECK(type == syncable::EXTENSION_SETTINGS || |
type == syncable::APP_SETTINGS); |
DCHECK_EQ(type, sync_type_); |
- DCHECK(sync_processor_); |
- |
- sync_type_ = syncable::UNSPECIFIED; |
- sync_processor_ = NULL; |
for (StorageObjMap::iterator it = storage_objs_.begin(); |
it != storage_objs_.end(); ++it) { |
@@ -272,6 +270,9 @@ void SettingsBackend::StopSyncing(syncable::ModelType type) { |
// and syncing was disabled, but StopSyncing is safe to call multiple times. |
it->second->StopSyncing(); |
} |
+ |
+ sync_type_ = syncable::UNSPECIFIED; |
+ sync_processor_.reset(); |
} |
} // namespace extensions |