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

Unified Diff: content/renderer/dom_storage/local_storage_cached_area.cc

Issue 2611843004: Implement throttling behavior for LocalStorage mojo messages.
Patch Set: Created 3 years, 11 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: content/renderer/dom_storage/local_storage_cached_area.cc
diff --git a/content/renderer/dom_storage/local_storage_cached_area.cc b/content/renderer/dom_storage/local_storage_cached_area.cc
index 379394c4f2a39dc079d7021717e26460668c4cba..662da6697247726fc4c210a2d4b776d3c55a46cf 100644
--- a/content/renderer/dom_storage/local_storage_cached_area.cc
+++ b/content/renderer/dom_storage/local_storage_cached_area.cc
@@ -83,6 +83,7 @@ LocalStorageCachedArea::LocalStorageCachedArea(
cached_areas_(cached_areas), weak_factory_(this) {
storage_partition_service->OpenLocalStorage(origin_,
mojo::MakeRequest(&leveldb_));
+ leveldb_.set_process_async_during_sync(true);
mojom::LevelDBObserverAssociatedPtrInfo ptr_info;
binding_.Bind(&ptr_info, leveldb_.associated_group());
leveldb_->AddObserver(std::move(ptr_info));
@@ -128,6 +129,8 @@ bool LocalStorageCachedArea::SetItem(const base::string16& key,
PackSource(page_url, storage_area_id),
base::Bind(&LocalStorageCachedArea::OnSetItemComplete,
weak_factory_.GetWeakPtr(), key));
+ FlushIfNeeded();
+
return true;
}
@@ -145,18 +148,19 @@ void LocalStorageCachedArea::RemoveItem(const base::string16& key,
PackSource(page_url, storage_area_id),
base::Bind(&LocalStorageCachedArea::OnRemoveItemComplete,
weak_factory_.GetWeakPtr(), key));
+ FlushIfNeeded();
}
void LocalStorageCachedArea::Clear(const GURL& page_url,
const std::string& storage_area_id) {
// No need to prime the cache in this case.
-
Reset();
map_ = new DOMStorageMap(kPerStorageAreaQuota);
ignore_all_mutations_ = true;
leveldb_->DeleteAll(PackSource(page_url, storage_area_id),
base::Bind(&LocalStorageCachedArea::OnClearComplete,
weak_factory_.GetWeakPtr()));
+ FlushIfNeeded();
}
void LocalStorageCachedArea::AreaCreated(LocalStorageArea* area) {
@@ -323,6 +327,13 @@ void LocalStorageCachedArea::EnsureLoaded() {
}
}
+void LocalStorageCachedArea::FlushIfNeeded() {
+ if (leveldb_.pending_callback_count() > 1000) {
+ leveldb_->FlushPipe();
+ DCHECK_EQ(0u, leveldb_.pending_callback_count());
+ }
+}
+
void LocalStorageCachedArea::OnSetItemComplete(const base::string16& key,
bool success) {
if (!success) {
« no previous file with comments | « content/renderer/dom_storage/local_storage_cached_area.h ('k') | mojo/public/cpp/bindings/interface_endpoint_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698