Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/api/storage/settings_backend.h" | 5 #include "chrome/browser/extensions/api/storage/settings_backend.h" |
| 6 | 6 |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "chrome/browser/extensions/api/storage/settings_sync_processor.h" | 9 #include "chrome/browser/extensions/api/storage/settings_sync_processor.h" |
| 10 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" | 10 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" |
| 11 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h" | 11 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h" |
| 12 #include "content/public/browser/browser_thread.h" | 12 #include "content/public/browser/browser_thread.h" |
| 13 #include "sync/api/sync_error_factory.h" | 13 #include "sync/api/sync_error_factory.h" |
| 14 | 14 |
| 15 using content::BrowserThread; | 15 using content::BrowserThread; |
| 16 | 16 |
| 17 namespace extensions { | 17 namespace extensions { |
| 18 | 18 |
| 19 SettingsBackend::SettingsBackend( | 19 SettingsBackend::SettingsBackend( |
| 20 const scoped_refptr<SettingsStorageFactory>& storage_factory, | 20 const scoped_refptr<SettingsStorageFactory>& storage_factory, |
| 21 const base::FilePath& base_path, | 21 const base::FilePath& base_path, |
| 22 syncer::ModelType sync_type, | |
| 22 const SettingsStorageQuotaEnforcer::Limits& quota, | 23 const SettingsStorageQuotaEnforcer::Limits& quota, |
| 23 const scoped_refptr<SettingsObserverList>& observers) | 24 const scoped_refptr<SettingsObserverList>& observers) |
| 24 : storage_factory_(storage_factory), | 25 : storage_factory_(storage_factory), |
| 25 base_path_(base_path), | 26 base_path_(base_path), |
| 26 quota_(quota), | 27 quota_(quota), |
| 27 observers_(observers), | 28 observers_(observers), |
| 28 sync_type_(syncer::UNSPECIFIED) { | 29 sync_type_(sync_type) { |
| 29 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 30 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 31 DCHECK(sync_type_ == syncer::EXTENSION_SETTINGS || | |
| 32 sync_type_ == syncer::APP_SETTINGS); | |
| 30 } | 33 } |
| 31 | 34 |
| 32 SettingsBackend::~SettingsBackend() { | 35 SettingsBackend::~SettingsBackend() { |
| 33 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 36 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 34 } | 37 } |
| 35 | 38 |
| 36 ValueStore* SettingsBackend::GetStorage( | 39 ValueStore* SettingsBackend::GetStorage( |
| 37 const std::string& extension_id) const { | 40 const std::string& extension_id) const { |
| 38 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 41 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 39 DictionaryValue empty; | 42 DictionaryValue empty; |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 63 storage)); | 66 storage)); |
| 64 storage_objs_[extension_id] = syncable_storage; | 67 storage_objs_[extension_id] = syncable_storage; |
| 65 | 68 |
| 66 if (sync_processor_.get()) { | 69 if (sync_processor_.get()) { |
| 67 syncer::SyncError error = | 70 syncer::SyncError error = |
| 68 syncable_storage->StartSyncing( | 71 syncable_storage->StartSyncing( |
| 69 sync_data, | 72 sync_data, |
| 70 CreateSettingsSyncProcessor(extension_id).Pass()); | 73 CreateSettingsSyncProcessor(extension_id).Pass()); |
| 71 if (error.IsSet()) | 74 if (error.IsSet()) |
| 72 syncable_storage.get()->StopSyncing(); | 75 syncable_storage.get()->StopSyncing(); |
| 76 } else { | |
| 77 flare_.Run(sync_type_); | |
|
not at google - send to devlin
2013/05/20 18:00:04
what does this actually do? will it call MergeData
tim (not reviewing)
2013/05/20 18:21:15
Done.
| |
| 73 } | 78 } |
| 74 | 79 |
| 75 return syncable_storage.get(); | 80 return syncable_storage.get(); |
| 76 } | 81 } |
| 77 | 82 |
| 78 void SettingsBackend::DeleteStorage(const std::string& extension_id) { | 83 void SettingsBackend::DeleteStorage(const std::string& extension_id) { |
| 79 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 84 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 80 | 85 |
| 81 // Clear settings when the extension is uninstalled. Leveldb implementations | 86 // Clear settings when the extension is uninstalled. Leveldb implementations |
| 82 // will also delete the database from disk when the object is destroyed as a | 87 // will also delete the database from disk when the object is destroyed as a |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 155 maybe_settings->error(); | 160 maybe_settings->error(); |
| 156 continue; | 161 continue; |
| 157 } | 162 } |
| 158 AddAllSyncData(*it, *maybe_settings->settings().get(), | 163 AddAllSyncData(*it, *maybe_settings->settings().get(), |
| 159 type, &all_sync_data); | 164 type, &all_sync_data); |
| 160 } | 165 } |
| 161 | 166 |
| 162 return all_sync_data; | 167 return all_sync_data; |
| 163 } | 168 } |
| 164 | 169 |
| 170 void SettingsBackend::InjectStartSyncFlare( | |
| 171 const syncer::SyncableService::StartSyncFlare& flare) { | |
| 172 flare_ = flare; | |
| 173 } | |
| 174 | |
| 165 syncer::SyncMergeResult SettingsBackend::MergeDataAndStartSyncing( | 175 syncer::SyncMergeResult SettingsBackend::MergeDataAndStartSyncing( |
| 166 syncer::ModelType type, | 176 syncer::ModelType type, |
| 167 const syncer::SyncDataList& initial_sync_data, | 177 const syncer::SyncDataList& initial_sync_data, |
| 168 scoped_ptr<syncer::SyncChangeProcessor> sync_processor, | 178 scoped_ptr<syncer::SyncChangeProcessor> sync_processor, |
| 169 scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) { | 179 scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) { |
| 170 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 180 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 171 DCHECK(type == syncer::EXTENSION_SETTINGS || | 181 DCHECK_EQ(sync_type_, type); |
| 172 type == syncer::APP_SETTINGS); | |
| 173 DCHECK_EQ(sync_type_, syncer::UNSPECIFIED); | |
| 174 DCHECK(!sync_processor_.get()); | 182 DCHECK(!sync_processor_.get()); |
| 175 DCHECK(sync_processor.get()); | 183 DCHECK(sync_processor.get()); |
| 176 DCHECK(sync_error_factory.get()); | 184 DCHECK(sync_error_factory.get()); |
| 177 | 185 |
| 178 sync_type_ = type; | |
| 179 sync_processor_ = sync_processor.Pass(); | 186 sync_processor_ = sync_processor.Pass(); |
| 180 sync_error_factory_ = sync_error_factory.Pass(); | 187 sync_error_factory_ = sync_error_factory.Pass(); |
| 181 | 188 |
| 182 // Group the initial sync data by extension id. | 189 // Group the initial sync data by extension id. |
| 183 std::map<std::string, linked_ptr<DictionaryValue> > grouped_sync_data; | 190 std::map<std::string, linked_ptr<DictionaryValue> > grouped_sync_data; |
| 184 for (syncer::SyncDataList::const_iterator it = initial_sync_data.begin(); | 191 for (syncer::SyncDataList::const_iterator it = initial_sync_data.begin(); |
| 185 it != initial_sync_data.end(); ++it) { | 192 it != initial_sync_data.end(); ++it) { |
| 186 SettingSyncData data(*it); | 193 SettingSyncData data(*it); |
| 187 linked_ptr<DictionaryValue> sync_data = | 194 linked_ptr<DictionaryValue> sync_data = |
| 188 grouped_sync_data[data.extension_id()]; | 195 grouped_sync_data[data.extension_id()]; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 253 storage->StopSyncing(); | 260 storage->StopSyncing(); |
| 254 } | 261 } |
| 255 | 262 |
| 256 return syncer::SyncError(); | 263 return syncer::SyncError(); |
| 257 } | 264 } |
| 258 | 265 |
| 259 void SettingsBackend::StopSyncing(syncer::ModelType type) { | 266 void SettingsBackend::StopSyncing(syncer::ModelType type) { |
| 260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 267 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 261 DCHECK(type == syncer::EXTENSION_SETTINGS || | 268 DCHECK(type == syncer::EXTENSION_SETTINGS || |
| 262 type == syncer::APP_SETTINGS); | 269 type == syncer::APP_SETTINGS); |
| 263 DCHECK(sync_type_ == type || sync_type_ == syncer::UNSPECIFIED); | 270 DCHECK_EQ(sync_type_, type); |
| 264 | 271 |
| 265 for (StorageObjMap::iterator it = storage_objs_.begin(); | 272 for (StorageObjMap::iterator it = storage_objs_.begin(); |
| 266 it != storage_objs_.end(); ++it) { | 273 it != storage_objs_.end(); ++it) { |
| 267 // Some storage areas may have already stopped syncing if they had areas | 274 // Some storage areas may have already stopped syncing if they had areas |
| 268 // and syncing was disabled, but StopSyncing is safe to call multiple times. | 275 // and syncing was disabled, but StopSyncing is safe to call multiple times. |
| 269 it->second->StopSyncing(); | 276 it->second->StopSyncing(); |
| 270 } | 277 } |
| 271 | 278 |
| 272 sync_type_ = syncer::UNSPECIFIED; | |
| 273 sync_processor_.reset(); | 279 sync_processor_.reset(); |
| 274 sync_error_factory_.reset(); | 280 sync_error_factory_.reset(); |
| 275 } | 281 } |
| 276 | 282 |
| 277 scoped_ptr<SettingsSyncProcessor> SettingsBackend::CreateSettingsSyncProcessor( | 283 scoped_ptr<SettingsSyncProcessor> SettingsBackend::CreateSettingsSyncProcessor( |
| 278 const std::string& extension_id) const { | 284 const std::string& extension_id) const { |
| 279 CHECK(sync_processor_.get()); | 285 CHECK(sync_processor_.get()); |
| 280 return scoped_ptr<SettingsSyncProcessor>( | 286 return scoped_ptr<SettingsSyncProcessor>( |
| 281 new SettingsSyncProcessor(extension_id, | 287 new SettingsSyncProcessor(extension_id, |
| 282 sync_type_, | 288 sync_type_, |
| 283 sync_processor_.get())); | 289 sync_processor_.get())); |
| 284 } | 290 } |
| 285 | 291 |
| 286 } // namespace extensions | 292 } // namespace extensions |
| OLD | NEW |