Index: content/browser/leveldb_wrapper_impl.cc |
diff --git a/content/browser/leveldb_wrapper_impl.cc b/content/browser/leveldb_wrapper_impl.cc |
index 576e66cc1bb093dacf316a819be2eb1fdd60b8a2..cef3f86b6d61d896b42de9d0a83bf0e7d493f1f4 100644 |
--- a/content/browser/leveldb_wrapper_impl.cc |
+++ b/content/browser/leveldb_wrapper_impl.cc |
@@ -55,7 +55,7 @@ LevelDBWrapperImpl::LevelDBWrapperImpl( |
int max_bytes_per_hour, |
int max_commits_per_hour, |
const base::Closure& no_bindings_callback) |
- : prefix_(prefix), |
+ : prefix_(leveldb::StdStringToUint8Vector(prefix)), |
no_bindings_callback_(no_bindings_callback), |
database_(database), |
bytes_used_(0), |
@@ -249,7 +249,7 @@ void LevelDBWrapperImpl::LoadMap(const base::Closure& completion_callback) { |
return; |
// TODO(michaeln): Import from sqlite localstorage db. |
- database_->GetPrefixed(leveldb::StdStringToUint8Vector(prefix_), |
+ database_->GetPrefixed(prefix_, |
base::Bind(&LevelDBWrapperImpl::OnLoadComplete, |
weak_ptr_factory_.GetWeakPtr())); |
} |
@@ -259,8 +259,11 @@ void LevelDBWrapperImpl::OnLoadComplete( |
std::vector<leveldb::mojom::KeyValuePtr> data) { |
DCHECK(!map_); |
map_.reset(new ValueMap); |
- for (auto& it : data) |
- (*map_)[it->key] = it->value; |
+ for (auto& it : data) { |
+ DCHECK_GE(it->key.size(), prefix_.size()); |
+ (*map_)[std::vector<uint8_t>(it->key.begin() + prefix_.size(), |
+ it->key.end())] = it->value; |
+ } |
// We proceed without using a backing store, nothing will be persisted but the |
// class is functional for the lifetime of the object. |
@@ -316,7 +319,7 @@ base::TimeDelta LevelDBWrapperImpl::ComputeCommitDelay() const { |
void LevelDBWrapperImpl::CommitChanges() { |
DCHECK(database_); |
- if (commit_batch_) |
+ if (!commit_batch_) |
return; |
commit_rate_limiter_.add_samples(1); |
@@ -328,13 +331,15 @@ void LevelDBWrapperImpl::CommitChanges() { |
leveldb::mojom::BatchedOperationPtr item = |
leveldb::mojom::BatchedOperation::New(); |
item->type = leveldb::mojom::BatchOperationType::DELETE_PREFIXED_KEY; |
- item->key = leveldb::StdStringToUint8Vector(prefix_); |
+ item->key = prefix_; |
operations.push_back(std::move(item)); |
} |
for (auto& it : commit_batch_->changed_values) { |
leveldb::mojom::BatchedOperationPtr item = |
leveldb::mojom::BatchedOperation::New(); |
- item->key = std::move(it.first); |
+ item->key.reserve(prefix_.size() + it.first.size()); |
+ item->key.insert(item->key.end(), prefix_.begin(), prefix_.end()); |
+ item->key.insert(item->key.end(), it.first.begin(), it.first.end()); |
if (!it.second) { |
item->type = leveldb::mojom::BatchOperationType::DELETE_KEY; |
} else { |