Index: chrome/browser/extensions/api/storage/sync_storage_backend.cc |
diff --git a/chrome/browser/extensions/api/storage/sync_storage_backend.cc b/chrome/browser/extensions/api/storage/sync_storage_backend.cc |
index eb4effa2e5574932123609b1b3ccfd272ad89e35..2d988fa808198203ebf54ee5c8f509244154655b 100644 |
--- a/chrome/browser/extensions/api/storage/sync_storage_backend.cc |
+++ b/chrome/browser/extensions/api/storage/sync_storage_backend.cc |
@@ -28,6 +28,10 @@ void AddAllSyncData(const std::string& extension_id, |
} |
} |
+scoped_ptr<base::DictionaryValue> EmptyDictionaryValue() { |
+ return make_scoped_ptr(new base::DictionaryValue()); |
+} |
+ |
} // namespace |
SyncStorageBackend::SyncStorageBackend( |
@@ -52,13 +56,12 @@ SyncStorageBackend::~SyncStorageBackend() {} |
ValueStore* SyncStorageBackend::GetStorage(const std::string& extension_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
- base::DictionaryValue empty; |
- return GetOrCreateStorageWithSyncData(extension_id, empty); |
+ return GetOrCreateStorageWithSyncData(extension_id, EmptyDictionaryValue()); |
} |
SyncableSettingsStorage* SyncStorageBackend::GetOrCreateStorageWithSyncData( |
const std::string& extension_id, |
- const base::DictionaryValue& sync_data) const { |
+ scoped_ptr<base::DictionaryValue> sync_data) const { |
DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
StorageObjMap::iterator maybe_storage = storage_objs_.find(extension_id); |
@@ -79,9 +82,9 @@ SyncableSettingsStorage* SyncStorageBackend::GetOrCreateStorageWithSyncData( |
if (sync_processor_.get()) { |
syncer::SyncError error = syncable_storage->StartSyncing( |
- sync_data, CreateSettingsSyncProcessor(extension_id).Pass()); |
+ sync_data.Pass(), CreateSettingsSyncProcessor(extension_id).Pass()); |
if (error.IsSet()) |
- syncable_storage.get()->StopSyncing(); |
+ syncable_storage->StopSyncing(); |
} |
return syncable_storage.get(); |
} |
@@ -110,10 +113,8 @@ std::set<std::string> SyncStorageBackend::GetKnownExtensionIDs() const { |
// Storage areas can be in-memory as well as on disk. |storage_objs_| will |
// contain all that are in-memory. |
- for (StorageObjMap::iterator it = storage_objs_.begin(); |
- it != storage_objs_.end(); |
- ++it) { |
- result.insert(it->first); |
+ for (const auto& storage_obj : storage_objs_) { |
+ result.insert(storage_obj.first); |
} |
// Leveldb databases are directories inside |base_path_|. |
@@ -148,7 +149,7 @@ syncer::SyncDataList SyncStorageBackend::GetAllSyncData(syncer::ModelType type) |
it != known_extension_ids.end(); |
++it) { |
ValueStore::ReadResult maybe_settings = |
- GetOrCreateStorageWithSyncData(*it, base::DictionaryValue())->Get(); |
+ GetOrCreateStorageWithSyncData(*it, EmptyDictionaryValue())->Get(); |
if (maybe_settings->HasError()) { |
LOG(WARNING) << "Failed to get settings for " << *it << ": " |
<< maybe_settings->error().message; |
@@ -175,54 +176,47 @@ syncer::SyncMergeResult SyncStorageBackend::MergeDataAndStartSyncing( |
sync_error_factory_ = sync_error_factory.Pass(); |
// Group the initial sync data by extension id. |
- std::map<std::string, linked_ptr<base::DictionaryValue> > grouped_sync_data; |
- for (syncer::SyncDataList::const_iterator it = initial_sync_data.begin(); |
- it != initial_sync_data.end(); |
- ++it) { |
- SettingSyncData data(*it); |
- linked_ptr<base::DictionaryValue> sync_data = |
- grouped_sync_data[data.extension_id()]; |
- if (!sync_data.get()) { |
- sync_data = |
- linked_ptr<base::DictionaryValue>(new base::DictionaryValue()); |
- grouped_sync_data[data.extension_id()] = sync_data; |
- } |
- DCHECK(!sync_data->HasKey(data.key())) << "Duplicate settings for " |
- << data.extension_id() << "/" |
- << data.key(); |
- sync_data->SetWithoutPathExpansion(data.key(), data.value().DeepCopy()); |
+ std::map<std::string, base::DictionaryValue*> grouped_sync_data; |
+ for (const syncer::SyncData& sync_data : initial_sync_data) { |
+ SettingSyncData data(sync_data); |
+ // (yes this really is a reference to a pointer) |
Devlin
2015/05/15 23:58:18
nitty nitty nit: Capitalization and punctuation.
not at google - send to devlin
2015/05/19 19:43:58
(but it's not a sentence, so doesn't necessarily n
|
+ base::DictionaryValue*& settings = grouped_sync_data[data.extension_id()]; |
+ if (!settings) |
+ settings = new base::DictionaryValue(); |
+ DCHECK(!settings->HasKey(data.key())) << "Duplicate settings for " |
+ << data.extension_id() << "/" |
+ << data.key(); |
+ settings->SetWithoutPathExpansion(data.key(), data.PassValue()); |
} |
// Start syncing all existing storage areas. Any storage areas created in |
// the future will start being synced as part of the creation process. |
- for (StorageObjMap::iterator it = storage_objs_.begin(); |
- it != storage_objs_.end(); |
- ++it) { |
- std::map<std::string, linked_ptr<base::DictionaryValue> >::iterator |
- maybe_sync_data = grouped_sync_data.find(it->first); |
+ for (const auto& storage_obj : storage_objs_) { |
+ const std::string& extension_id = storage_obj.first; |
+ SyncableSettingsStorage* storage = storage_obj.second.get(); |
+ |
+ auto group = grouped_sync_data.find(extension_id); |
syncer::SyncError error; |
- if (maybe_sync_data != grouped_sync_data.end()) { |
- error = it->second->StartSyncing( |
- *maybe_sync_data->second, |
- CreateSettingsSyncProcessor(it->first).Pass()); |
- grouped_sync_data.erase(it->first); |
+ if (group != grouped_sync_data.end()) { |
+ error = storage->StartSyncing( |
+ make_scoped_ptr(group->second), |
+ CreateSettingsSyncProcessor(extension_id).Pass()); |
+ grouped_sync_data.erase(group); |
} else { |
- base::DictionaryValue empty; |
- error = it->second->StartSyncing( |
- empty, CreateSettingsSyncProcessor(it->first).Pass()); |
+ error = storage->StartSyncing( |
+ EmptyDictionaryValue(), |
+ CreateSettingsSyncProcessor(extension_id).Pass()); |
} |
+ |
if (error.IsSet()) |
- it->second->StopSyncing(); |
+ storage->StopSyncing(); |
} |
// Eagerly create and init the rest of the storage areas that have sync data. |
// Under normal circumstances (i.e. not first-time sync) this will be all of |
// them. |
- for (std::map<std::string, linked_ptr<base::DictionaryValue> >::iterator it = |
- grouped_sync_data.begin(); |
- it != grouped_sync_data.end(); |
- ++it) { |
- GetOrCreateStorageWithSyncData(it->first, *it->second); |
+ for (const auto& group : grouped_sync_data) { |
+ GetOrCreateStorageWithSyncData(group.first, make_scoped_ptr(group.second)); |
} |
return syncer::SyncMergeResult(type); |
@@ -235,23 +229,21 @@ syncer::SyncError SyncStorageBackend::ProcessSyncChanges( |
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; |
- for (syncer::SyncChangeList::const_iterator it = sync_changes.begin(); |
- it != sync_changes.end(); |
- ++it) { |
- SettingSyncData data(*it); |
- grouped_sync_data[data.extension_id()].push_back(data); |
+ std::map<std::string, SettingSyncDataList*> grouped_sync_data; |
+ for (const syncer::SyncChange& change : sync_changes) { |
+ scoped_ptr<SettingSyncData> data(new SettingSyncData(change)); |
+ SettingSyncDataList*& group = grouped_sync_data[data->extension_id()]; |
+ if (!group) |
+ group = new SettingSyncDataList(); |
+ group->push_back(data.Pass()); |
} |
// Create any storage areas that don't exist yet but have sync data. |
- base::DictionaryValue empty; |
- for (std::map<std::string, SettingSyncDataList>::iterator it = |
- grouped_sync_data.begin(); |
- it != grouped_sync_data.end(); |
- ++it) { |
+ for (const auto& group : grouped_sync_data) { |
SyncableSettingsStorage* storage = |
- GetOrCreateStorageWithSyncData(it->first, empty); |
- syncer::SyncError error = storage->ProcessSyncChanges(it->second); |
+ GetOrCreateStorageWithSyncData(group.first, EmptyDictionaryValue()); |
+ syncer::SyncError error = |
+ storage->ProcessSyncChanges(make_scoped_ptr(group.second)); |
if (error.IsSet()) |
storage->StopSyncing(); |
} |
@@ -264,12 +256,10 @@ void SyncStorageBackend::StopSyncing(syncer::ModelType type) { |
DCHECK(type == syncer::EXTENSION_SETTINGS || type == syncer::APP_SETTINGS); |
DCHECK_EQ(sync_type_, type); |
- for (StorageObjMap::iterator it = storage_objs_.begin(); |
- it != storage_objs_.end(); |
- ++it) { |
+ for (const auto& storage_obj : storage_objs_) { |
// 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(); |
+ storage_obj.second->StopSyncing(); |
} |
sync_processor_.reset(); |