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

Side by Side Diff: chrome/browser/extensions/settings/settings_backend.cc

Issue 10662035: [Sync] Put everything in sync/api into csync namespace (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/settings/settings_backend.h" 5 #include "chrome/browser/extensions/settings/settings_backend.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/json/json_reader.h" 9 #include "base/json/json_reader.h"
10 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 } 67 }
68 68
69 linked_ptr<SyncableSettingsStorage> syncable_storage( 69 linked_ptr<SyncableSettingsStorage> syncable_storage(
70 new SyncableSettingsStorage( 70 new SyncableSettingsStorage(
71 observers_, 71 observers_,
72 extension_id, 72 extension_id,
73 storage)); 73 storage));
74 storage_objs_[extension_id] = syncable_storage; 74 storage_objs_[extension_id] = syncable_storage;
75 75
76 if (sync_processor_.get()) { 76 if (sync_processor_.get()) {
77 SyncError error = 77 csync::SyncError error =
78 syncable_storage->StartSyncing( 78 syncable_storage->StartSyncing(
79 sync_data, 79 sync_data,
80 CreateSettingsSyncProcessor(extension_id).Pass()); 80 CreateSettingsSyncProcessor(extension_id).Pass());
81 if (error.IsSet()) 81 if (error.IsSet())
82 syncable_storage.get()->StopSyncing(); 82 syncable_storage.get()->StopSyncing();
83 } 83 }
84 84
85 return syncable_storage.get(); 85 return syncable_storage.get();
86 } 86 }
87 87
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 } 129 }
130 } 130 }
131 131
132 return result; 132 return result;
133 } 133 }
134 134
135 static void AddAllSyncData( 135 static void AddAllSyncData(
136 const std::string& extension_id, 136 const std::string& extension_id,
137 const DictionaryValue& src, 137 const DictionaryValue& src,
138 syncable::ModelType type, 138 syncable::ModelType type,
139 SyncDataList* dst) { 139 csync::SyncDataList* dst) {
140 for (DictionaryValue::Iterator it(src); it.HasNext(); it.Advance()) { 140 for (DictionaryValue::Iterator it(src); it.HasNext(); it.Advance()) {
141 dst->push_back(settings_sync_util::CreateData( 141 dst->push_back(settings_sync_util::CreateData(
142 extension_id, it.key(), it.value(), type)); 142 extension_id, it.key(), it.value(), type));
143 } 143 }
144 } 144 }
145 145
146 SyncDataList SettingsBackend::GetAllSyncData( 146 csync::SyncDataList SettingsBackend::GetAllSyncData(
147 syncable::ModelType type) const { 147 syncable::ModelType type) const {
148 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 148 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
149 // Ignore the type, it's just for sanity checking; assume that whatever base 149 // Ignore the type, it's just for sanity checking; assume that whatever base
150 // path we're constructed with is correct for the sync type. 150 // path we're constructed with is correct for the sync type.
151 DCHECK(type == syncable::EXTENSION_SETTINGS || 151 DCHECK(type == syncable::EXTENSION_SETTINGS ||
152 type == syncable::APP_SETTINGS); 152 type == syncable::APP_SETTINGS);
153 153
154 // For all extensions, get all their settings. This has the effect 154 // For all extensions, get all their settings. This has the effect
155 // of bringing in the entire state of extension settings in memory; sad. 155 // of bringing in the entire state of extension settings in memory; sad.
156 SyncDataList all_sync_data; 156 csync::SyncDataList all_sync_data;
157 std::set<std::string> known_extension_ids(GetKnownExtensionIDs()); 157 std::set<std::string> known_extension_ids(GetKnownExtensionIDs());
158 158
159 for (std::set<std::string>::const_iterator it = known_extension_ids.begin(); 159 for (std::set<std::string>::const_iterator it = known_extension_ids.begin();
160 it != known_extension_ids.end(); ++it) { 160 it != known_extension_ids.end(); ++it) {
161 ValueStore::ReadResult maybe_settings = GetStorage(*it)->Get(); 161 ValueStore::ReadResult maybe_settings = GetStorage(*it)->Get();
162 if (maybe_settings->HasError()) { 162 if (maybe_settings->HasError()) {
163 LOG(WARNING) << "Failed to get settings for " << *it << ": " << 163 LOG(WARNING) << "Failed to get settings for " << *it << ": " <<
164 maybe_settings->error(); 164 maybe_settings->error();
165 continue; 165 continue;
166 } 166 }
167 AddAllSyncData(*it, *maybe_settings->settings().get(), 167 AddAllSyncData(*it, *maybe_settings->settings().get(),
168 type, &all_sync_data); 168 type, &all_sync_data);
169 } 169 }
170 170
171 return all_sync_data; 171 return all_sync_data;
172 } 172 }
173 173
174 SyncError SettingsBackend::MergeDataAndStartSyncing( 174 csync::SyncError SettingsBackend::MergeDataAndStartSyncing(
175 syncable::ModelType type, 175 syncable::ModelType type,
176 const SyncDataList& initial_sync_data, 176 const csync::SyncDataList& initial_sync_data,
177 scoped_ptr<SyncChangeProcessor> sync_processor, 177 scoped_ptr<csync::SyncChangeProcessor> sync_processor,
178 scoped_ptr<SyncErrorFactory> sync_error_factory) { 178 scoped_ptr<csync::SyncErrorFactory> sync_error_factory) {
179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
180 DCHECK(type == syncable::EXTENSION_SETTINGS || 180 DCHECK(type == syncable::EXTENSION_SETTINGS ||
181 type == syncable::APP_SETTINGS); 181 type == syncable::APP_SETTINGS);
182 DCHECK_EQ(sync_type_, syncable::UNSPECIFIED); 182 DCHECK_EQ(sync_type_, syncable::UNSPECIFIED);
183 DCHECK(!sync_processor_.get()); 183 DCHECK(!sync_processor_.get());
184 DCHECK(sync_processor.get()); 184 DCHECK(sync_processor.get());
185 DCHECK(sync_error_factory.get()); 185 DCHECK(sync_error_factory.get());
186 186
187 sync_type_ = type; 187 sync_type_ = type;
188 sync_processor_ = sync_processor.Pass(); 188 sync_processor_ = sync_processor.Pass();
189 sync_error_factory_ = sync_error_factory.Pass(); 189 sync_error_factory_ = sync_error_factory.Pass();
190 190
191 // Group the initial sync data by extension id. 191 // Group the initial sync data by extension id.
192 std::map<std::string, linked_ptr<DictionaryValue> > grouped_sync_data; 192 std::map<std::string, linked_ptr<DictionaryValue> > grouped_sync_data;
193 for (SyncDataList::const_iterator it = initial_sync_data.begin(); 193 for (csync::SyncDataList::const_iterator it = initial_sync_data.begin();
194 it != initial_sync_data.end(); ++it) { 194 it != initial_sync_data.end(); ++it) {
195 SettingSyncData data(*it); 195 SettingSyncData data(*it);
asargent_no_longer_on_chrome 2012/06/26 18:08:17 nit: double space
akalin 2012/06/26 20:28:28 Done.
196 linked_ptr<DictionaryValue> sync_data = 196 linked_ptr<DictionaryValue> sync_data =
197 grouped_sync_data[data.extension_id()]; 197 grouped_sync_data[data.extension_id()];
198 if (!sync_data.get()) { 198 if (!sync_data.get()) {
199 sync_data = linked_ptr<DictionaryValue>(new DictionaryValue()); 199 sync_data = linked_ptr<DictionaryValue>(new DictionaryValue());
200 grouped_sync_data[data.extension_id()] = sync_data; 200 grouped_sync_data[data.extension_id()] = sync_data;
201 } 201 }
202 DCHECK(!sync_data->HasKey(data.key())) << 202 DCHECK(!sync_data->HasKey(data.key())) <<
203 "Duplicate settings for " << data.extension_id() << "/" << data.key(); 203 "Duplicate settings for " << data.extension_id() << "/" << data.key();
204 sync_data->Set(data.key(), data.value().DeepCopy()); 204 sync_data->Set(data.key(), data.value().DeepCopy());
205 } 205 }
206 206
207 // Start syncing all existing storage areas. Any storage areas created in 207 // Start syncing all existing storage areas. Any storage areas created in
208 // the future will start being synced as part of the creation process. 208 // the future will start being synced as part of the creation process.
209 for (StorageObjMap::iterator it = storage_objs_.begin(); 209 for (StorageObjMap::iterator it = storage_objs_.begin();
210 it != storage_objs_.end(); ++it) { 210 it != storage_objs_.end(); ++it) {
211 std::map<std::string, linked_ptr<DictionaryValue> >::iterator 211 std::map<std::string, linked_ptr<DictionaryValue> >::iterator
212 maybe_sync_data = grouped_sync_data.find(it->first); 212 maybe_sync_data = grouped_sync_data.find(it->first);
213 SyncError error; 213 csync::SyncError error;
214 if (maybe_sync_data != grouped_sync_data.end()) { 214 if (maybe_sync_data != grouped_sync_data.end()) {
215 error = it->second->StartSyncing( 215 error = it->second->StartSyncing(
216 *maybe_sync_data->second, 216 *maybe_sync_data->second,
217 CreateSettingsSyncProcessor(it->first).Pass()); 217 CreateSettingsSyncProcessor(it->first).Pass());
218 grouped_sync_data.erase(it->first); 218 grouped_sync_data.erase(it->first);
219 } else { 219 } else {
220 DictionaryValue empty; 220 DictionaryValue empty;
221 error = it->second->StartSyncing( 221 error = it->second->StartSyncing(
222 empty, 222 empty,
223 CreateSettingsSyncProcessor(it->first).Pass()); 223 CreateSettingsSyncProcessor(it->first).Pass());
224 } 224 }
225 if (error.IsSet()) 225 if (error.IsSet())
226 it->second->StopSyncing(); 226 it->second->StopSyncing();
227 } 227 }
228 228
229 // Eagerly create and init the rest of the storage areas that have sync data. 229 // Eagerly create and init the rest of the storage areas that have sync data.
230 // Under normal circumstances (i.e. not first-time sync) this will be all of 230 // Under normal circumstances (i.e. not first-time sync) this will be all of
231 // them. 231 // them.
232 for (std::map<std::string, linked_ptr<DictionaryValue> >::iterator it = 232 for (std::map<std::string, linked_ptr<DictionaryValue> >::iterator it =
233 grouped_sync_data.begin(); it != grouped_sync_data.end(); ++it) { 233 grouped_sync_data.begin(); it != grouped_sync_data.end(); ++it) {
234 GetOrCreateStorageWithSyncData(it->first, *it->second); 234 GetOrCreateStorageWithSyncData(it->first, *it->second);
235 } 235 }
236 236
237 return SyncError(); 237 return csync::SyncError();
238 } 238 }
239 239
240 SyncError SettingsBackend::ProcessSyncChanges( 240 csync::SyncError SettingsBackend::ProcessSyncChanges(
241 const tracked_objects::Location& from_here, 241 const tracked_objects::Location& from_here,
242 const SyncChangeList& sync_changes) { 242 const csync::SyncChangeList& sync_changes) {
243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
244 DCHECK(sync_processor_.get()); 244 DCHECK(sync_processor_.get());
245 245
246 // Group changes by extension, to pass all changes in a single method call. 246 // Group changes by extension, to pass all changes in a single method call.
247 std::map<std::string, SettingSyncDataList> grouped_sync_data; 247 std::map<std::string, SettingSyncDataList> grouped_sync_data;
248 for (SyncChangeList::const_iterator it = sync_changes.begin(); 248 for (csync::SyncChangeList::const_iterator it = sync_changes.begin();
249 it != sync_changes.end(); ++it) { 249 it != sync_changes.end(); ++it) {
250 SettingSyncData data(*it); 250 SettingSyncData data(*it);
asargent_no_longer_on_chrome 2012/06/26 18:08:17 nit: double space
akalin 2012/06/26 20:28:28 Done.
251 grouped_sync_data[data.extension_id()].push_back(data); 251 grouped_sync_data[data.extension_id()].push_back(data);
252 } 252 }
253 253
254 // Create any storage areas that don't exist yet but have sync data. 254 // Create any storage areas that don't exist yet but have sync data.
255 DictionaryValue empty; 255 DictionaryValue empty;
256 for (std::map<std::string, SettingSyncDataList>::iterator 256 for (std::map<std::string, SettingSyncDataList>::iterator
257 it = grouped_sync_data.begin(); it != grouped_sync_data.end(); ++it) { 257 it = grouped_sync_data.begin(); it != grouped_sync_data.end(); ++it) {
258 SyncableSettingsStorage* storage = 258 SyncableSettingsStorage* storage =
259 GetOrCreateStorageWithSyncData(it->first, empty); 259 GetOrCreateStorageWithSyncData(it->first, empty);
260 SyncError error = storage->ProcessSyncChanges(it->second); 260 csync::SyncError error = storage->ProcessSyncChanges(it->second);
261 if (error.IsSet()) 261 if (error.IsSet())
262 storage->StopSyncing(); 262 storage->StopSyncing();
263 } 263 }
264 264
265 return SyncError(); 265 return csync::SyncError();
266 } 266 }
267 267
268 void SettingsBackend::StopSyncing(syncable::ModelType type) { 268 void SettingsBackend::StopSyncing(syncable::ModelType type) {
269 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 269 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
270 DCHECK(type == syncable::EXTENSION_SETTINGS || 270 DCHECK(type == syncable::EXTENSION_SETTINGS ||
271 type == syncable::APP_SETTINGS); 271 type == syncable::APP_SETTINGS);
272 DCHECK(sync_type_ == type || sync_type_ == syncable::UNSPECIFIED); 272 DCHECK(sync_type_ == type || sync_type_ == syncable::UNSPECIFIED);
273 273
274 for (StorageObjMap::iterator it = storage_objs_.begin(); 274 for (StorageObjMap::iterator it = storage_objs_.begin();
275 it != storage_objs_.end(); ++it) { 275 it != storage_objs_.end(); ++it) {
(...skipping 10 matching lines...) Expand all
286 scoped_ptr<SettingsSyncProcessor> SettingsBackend::CreateSettingsSyncProcessor( 286 scoped_ptr<SettingsSyncProcessor> SettingsBackend::CreateSettingsSyncProcessor(
287 const std::string& extension_id) const { 287 const std::string& extension_id) const {
288 CHECK(sync_processor_.get()); 288 CHECK(sync_processor_.get());
289 return scoped_ptr<SettingsSyncProcessor>( 289 return scoped_ptr<SettingsSyncProcessor>(
290 new SettingsSyncProcessor(extension_id, 290 new SettingsSyncProcessor(extension_id,
291 sync_type_, 291 sync_type_,
292 sync_processor_.get())); 292 sync_processor_.get()));
293 } 293 }
294 294
295 } // namespace extensions 295 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698