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

Unified Diff: chrome/browser/value_store/caching_value_store.cc

Issue 10545128: Unrevert r141537: Add extensions::StateStore and use that instead of (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix.crash Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/value_store/caching_value_store.cc
diff --git a/chrome/browser/value_store/caching_value_store.cc b/chrome/browser/value_store/caching_value_store.cc
deleted file mode 100644
index d0d589988be925b4394957711fe88706d4503c2b..0000000000000000000000000000000000000000
--- a/chrome/browser/value_store/caching_value_store.cc
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/value_store/caching_value_store.h"
-
-#include "chrome/browser/value_store/leveldb_value_store.h"
-#include "content/public/browser/browser_thread.h"
-
-using content::BrowserThread;
-
-class CachingValueStore::Backend : public base::RefCountedThreadSafe<Backend> {
- public:
- typedef base::Callback<void(scoped_ptr<base::DictionaryValue>)> ReadyCallback;
- Backend() : storage_(NULL) {}
-
- void Init(const FilePath& db_path, ReadyCallback callback) {
- BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
- base::Bind(&CachingValueStore::Backend::InitOnFileThread,
- this, db_path, callback));
- }
-
- void Set(const std::string& key, scoped_ptr<base::Value> value) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- // We've already checked that the value has changed, so don't bother
- // checking again. Also, skip changes to avoid wasted copies.
- storage_->Set(ValueStore::IGNORE_QUOTA |
- ValueStore::NO_GENERATE_CHANGES |
- ValueStore::NO_CHECK_OLD_VALUE,
- key, *value.get());
- }
-
- void Remove(const std::string& key) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- storage_->Remove(key);
- }
-
- private:
- friend class base::RefCountedThreadSafe<Backend>;
-
- virtual ~Backend() {
- if (BrowserThread::CurrentlyOn(BrowserThread::FILE)) {
- delete storage_;
- } else {
- BrowserThread::DeleteSoon(BrowserThread::FILE, FROM_HERE, storage_);
- }
- }
-
- void InitOnFileThread(const FilePath& db_path, ReadyCallback callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- DCHECK(!storage_);
- storage_ = LeveldbValueStore::Create(db_path);
-
- ValueStore::ReadResult result = storage_->Get();
- if (result->HasError()) {
- callback.Run(scoped_ptr<base::DictionaryValue>(NULL));
- } else {
- callback.Run(result->settings().Pass());
- }
- }
-
- // The actual ValueStore that handles persisting the data to disk. Used
- // exclusively on the FILE thread.
- LeveldbValueStore* storage_;
-
- DISALLOW_COPY_AND_ASSIGN(Backend);
-};
-
-CachingValueStore::CachingValueStore(const FilePath& db_path)
- : backend_(new Backend()) {
- backend_->Init(db_path,
- base::Bind(&CachingValueStore::OnBackendReady, AsWeakPtr()));
-}
-
-CachingValueStore::~CachingValueStore() {
-}
-
-bool CachingValueStore::Get(const std::string& key,
- const base::Value** result) {
- DCHECK(CalledOnValidThread());
- DCHECK(IsInitialized());
-
- base::Value* value = NULL;
- if (cache_->GetWithoutPathExpansion(key, &value)) {
- *result = value;
- return true;
- }
- return false;
-}
-
-void CachingValueStore::Set(const std::string& key, base::Value* value) {
- DCHECK(CalledOnValidThread());
- DCHECK(IsInitialized());
-
- scoped_ptr<base::Value> new_value(value);
- base::Value* old_value = NULL;
- if (!cache_->GetWithoutPathExpansion(key, &old_value) ||
- !value->Equals(old_value)) {
- cache_->SetWithoutPathExpansion(key, new_value.release());
-
- scoped_ptr<base::Value> passed_value(value->DeepCopy());
- BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
- base::Bind(&CachingValueStore::Backend::Set,
- backend_, key, base::Passed(passed_value.Pass())));
- }
-}
-
-void CachingValueStore::Remove(const std::string& key) {
- DCHECK(CalledOnValidThread());
- DCHECK(IsInitialized());
-
- if (cache_->RemoveWithoutPathExpansion(key, NULL)) {
- BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
- base::Bind(&CachingValueStore::Backend::Remove,
- backend_, key));
- }
-}
-
-bool CachingValueStore::IsInitialized() {
- DCHECK(CalledOnValidThread());
- return !!cache_.get();
-}
-
-void CachingValueStore::AddObserver(Observer* observer) {
- DCHECK(CalledOnValidThread());
- observers_.AddObserver(observer);
-}
-
-void CachingValueStore::RemoveObserver(Observer* observer) {
- DCHECK(CalledOnValidThread());
- observers_.RemoveObserver(observer);
-}
-
-void CachingValueStore::OnBackendReady(
- scoped_ptr<base::DictionaryValue> values) {
- DCHECK(CalledOnValidThread());
- DCHECK(!cache_.get());
- cache_.swap(values);
-
- FOR_EACH_OBSERVER(Observer, observers_, OnInitializationComplete());
-}
« no previous file with comments | « chrome/browser/value_store/caching_value_store.h ('k') | chrome/browser/value_store/caching_value_store_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698