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

Unified Diff: chrome/browser/extensions/settings/settings_backend.cc

Issue 8497065: Extension Settings API: make it so that when leveldb storage areas fail to be (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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 78e776a60d23d29272d78def7199c119162dd6aa..439e0c746a640e08ac74f38b3b1fce16f72dd395 100644
--- a/chrome/browser/extensions/settings/settings_backend.cc
+++ b/chrome/browser/extensions/settings/settings_backend.cc
@@ -11,20 +11,18 @@
#include "base/logging.h"
#include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h"
-#include "chrome/browser/extensions/settings/settings_leveldb_storage.h"
+#include "chrome/browser/extensions/settings/failing_settings_storage.h"
#include "chrome/browser/extensions/settings/settings_storage_cache.h"
+#include "chrome/browser/extensions/settings/settings_storage_factory.h"
#include "chrome/browser/extensions/settings/settings_storage_quota_enforcer.h"
#include "chrome/browser/extensions/settings/settings_sync_util.h"
-#include "chrome/browser/extensions/settings/in_memory_settings_storage.h"
#include "chrome/common/extensions/extension.h"
#include "content/public/browser/browser_thread.h"
-#include "third_party/leveldatabase/src/include/leveldb/iterator.h"
-#include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
-
-namespace extensions {
using content::BrowserThread;
+namespace extensions {
+
namespace {
// Total quota for all settings per extension, in bytes. 100K should be enough
@@ -41,9 +39,11 @@ const size_t kMaxSettingKeys = 512;
} // namespace
SettingsBackend::SettingsBackend(
+ SettingsStorageFactory* storage_factory,
const FilePath& base_path,
const scoped_refptr<SettingsObserverList>& observers)
- : base_path_(base_path),
+ : storage_factory_(storage_factory),
+ base_path_(base_path),
observers_(observers),
sync_type_(syncable::UNSPECIFIED),
sync_processor_(NULL) {
@@ -66,35 +66,27 @@ SettingsBackend::GetOrCreateStorageWithSyncData(
const std::string& extension_id, const DictionaryValue& sync_data) const {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- linked_ptr<SyncableSettingsStorage> syncable_storage =
- storage_objs_[extension_id];
- if (syncable_storage.get()) {
- return syncable_storage.get();
+ StorageObjMap::iterator maybe_storage = storage_objs_.find(extension_id);
+ if (maybe_storage != storage_objs_.end()) {
+ return maybe_storage->second.get();
}
- SettingsStorage* storage =
- SettingsLeveldbStorage::Create(base_path_, extension_id);
+ SettingsStorage* storage = storage_factory_->Create(base_path_, extension_id);
if (storage) {
storage = new SettingsStorageCache(storage);
+ // It's fine to create the quota enforcer underneath the sync later, since
Matt Perry 2011/11/11 00:49:38 later = layer?
not at google - send to devlin 2011/11/12 02:10:27 Done.
+ // sync will only go ahead if each underlying storage operation succeeds.
+ storage = new SettingsStorageQuotaEnforcer(
+ kTotalQuotaBytes, kQuotaPerSettingBytes, kMaxSettingKeys, storage);
} else {
- // Failed to create a leveldb storage area, create an in-memory one.
- // It's ok for these to be synced, it just means that on next starting up
- // extensions will see the "old" settings, then overwritten (and notified)
- // when the sync changes come through.
- storage = new InMemorySettingsStorage();
+ storage = new FailingSettingsStorage();
}
- // It's fine to create the quota enforcer underneath the sync later, since
- // sync will only go ahead if each underlying storage operation is successful.
- storage = new SettingsStorageQuotaEnforcer(
- kTotalQuotaBytes, kQuotaPerSettingBytes, kMaxSettingKeys, storage);
-
- syncable_storage =
- linked_ptr<SyncableSettingsStorage>(
- new SyncableSettingsStorage(
- observers_,
- extension_id,
- storage));
+ linked_ptr<SyncableSettingsStorage> syncable_storage(
+ new SyncableSettingsStorage(
+ observers_,
+ extension_id,
+ storage));
if (sync_processor_) {
// TODO(kalman): do something if StartSyncing fails.
ignore_result(syncable_storage->StartSyncing(
@@ -154,8 +146,7 @@ static void AddAllSyncData(
SyncDataList* dst) {
for (DictionaryValue::Iterator it(src); it.HasNext(); it.Advance()) {
dst->push_back(
- settings_sync_util::CreateData(
- extension_id, it.key(), it.value()));
+ settings_sync_util::CreateData(extension_id, it.key(), it.value()));
}
}

Powered by Google App Engine
This is Rietveld 408576698