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

Unified Diff: content/browser/dom_storage/local_storage_context_mojo.cc

Issue 2597353002: Add callback to LevelDBWrapperImpl to allow extra operations on commit. (Closed)
Patch Set: Created 4 years 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: content/browser/dom_storage/local_storage_context_mojo.cc
diff --git a/content/browser/dom_storage/local_storage_context_mojo.cc b/content/browser/dom_storage/local_storage_context_mojo.cc
index 04d0108717e9ba6ad70926265cc8f3353b2ea082..241daeddff43a13c0a40d48c83b9f391f26d3ce6 100644
--- a/content/browser/dom_storage/local_storage_context_mojo.cc
+++ b/content/browser/dom_storage/local_storage_context_mojo.cc
@@ -31,8 +31,6 @@ const char kOriginSeparator = '\x00';
const char kDataPrefix[] = "_";
const int64_t kMinSchemaVersion = 1;
const int64_t kCurrentSchemaVersion = 1;
-
-void NoOpResult(leveldb::mojom::DatabaseError status) {}
}
LocalStorageContextMojo::LocalStorageContextMojo(
@@ -79,9 +77,9 @@ void LocalStorageContextMojo::OpenLocalStorage(
if (connection_state_ == CONNECTION_IN_PROGRESS) {
// Queue this OpenLocalStorage call for when we have a level db pointer.
- on_database_opened_callbacks_.push_back(base::Bind(
+ on_database_opened_callbacks_.push_back(base::BindOnce(
&LocalStorageContextMojo::BindLocalStorage,
- weak_ptr_factory_.GetWeakPtr(), origin, base::Passed(&request)));
+ weak_ptr_factory_.GetWeakPtr(), origin, std::move(request)));
return;
}
@@ -102,6 +100,24 @@ void LocalStorageContextMojo::OnLevelDBWrapperHasNoBindings(
level_db_wrappers_.erase(origin);
}
+std::vector<leveldb::mojom::BatchedOperationPtr>
+LocalStorageContextMojo::OnLevelDBWrapperPrepareToCommit() {
+ std::vector<leveldb::mojom::BatchedOperationPtr> operations;
+
+ // Write schema version if not already done so before.
+ if (!database_initialized_) {
+ leveldb::mojom::BatchedOperationPtr item =
+ leveldb::mojom::BatchedOperation::New();
+ item->key = leveldb::StdStringToUint8Vector(kVersionKey);
+ item->value = leveldb::StdStringToUint8Vector(
+ base::Int64ToString(kCurrentSchemaVersion));
+ operations.push_back(std::move(item));
+ database_initialized_ = true;
+ }
+
+ return operations;
+}
+
void LocalStorageContextMojo::OnUserServiceConnectionComplete() {
CHECK_EQ(service_manager::mojom::ConnectResult::SUCCEEDED,
file_service_connection_->GetResult());
@@ -161,13 +177,8 @@ void LocalStorageContextMojo::OnGotDatabaseVersion(
leveldb::mojom::DatabaseError status,
const std::vector<uint8_t>& value) {
if (status == leveldb::mojom::DatabaseError::NOT_FOUND) {
- // New database, write current version and continue.
- // TODO(mek): Delay writing version until first actual data gets committed.
- database_->Put(leveldb::StdStringToUint8Vector(kVersionKey),
- leveldb::StdStringToUint8Vector(
- base::Int64ToString(kCurrentSchemaVersion)),
- base::Bind(&NoOpResult));
- // new database
+ // New database, nothing more to do. Current version will get written
+ // when first data is committed.
} else if (status == leveldb::mojom::DatabaseError::OK) {
// Existing database, check if version number matches current schema
// version.
@@ -178,6 +189,8 @@ void LocalStorageContextMojo::OnGotDatabaseVersion(
// TODO(mek): delete and recreate database, rather than failing outright.
database_ = nullptr;
}
+
+ database_initialized_ = true;
} else {
// Other read error. Possibly database corruption.
// TODO(mek): delete and recreate database, rather than failing outright.
@@ -188,7 +201,7 @@ void LocalStorageContextMojo::OnGotDatabaseVersion(
// delayed bindings.
connection_state_ = CONNECTION_FINISHED;
for (size_t i = 0; i < on_database_opened_callbacks_.size(); ++i)
- on_database_opened_callbacks_[i].Run();
+ std::move(on_database_opened_callbacks_[i]).Run();
on_database_opened_callbacks_.clear();
}
@@ -214,7 +227,9 @@ void LocalStorageContextMojo::BindLocalStorage(
base::TimeDelta::FromSeconds(kCommitDefaultDelaySecs), kMaxBytesPerHour,
kMaxCommitsPerHour,
base::Bind(&LocalStorageContextMojo::OnLevelDBWrapperHasNoBindings,
- base::Unretained(this), origin));
+ base::Unretained(this), origin),
+ base::Bind(&LocalStorageContextMojo::OnLevelDBWrapperPrepareToCommit,
+ base::Unretained(this)));
found = level_db_wrappers_.find(origin);
}

Powered by Google App Engine
This is Rietveld 408576698