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

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

Issue 12398008: Purge in-memory localStorage areas if the # of areas exceeds the limit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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/dom_storage_dispatcher.cc
diff --git a/content/renderer/dom_storage/dom_storage_dispatcher.cc b/content/renderer/dom_storage/dom_storage_dispatcher.cc
index 5963694377729c2f912f6df5f077fd6005ebe142..ce942c963b5e83a15b3551273031477d62ded60e 100644
--- a/content/renderer/dom_storage/dom_storage_dispatcher.cc
+++ b/content/renderer/dom_storage/dom_storage_dispatcher.cc
@@ -13,6 +13,7 @@
#include "content/renderer/dom_storage/webstoragearea_impl.h"
#include "content/renderer/dom_storage/webstoragenamespace_impl.h"
#include "content/renderer/render_thread_impl.h"
+#include "ipc/ipc_sync_message_filter.h"
#include "third_party/WebKit/Source/Platform/chromium/public/Platform.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageEventDispatcher.h"
@@ -103,7 +104,7 @@ class DomStorageDispatcher::ProxyImpl : public DomStorageProxy {
// Methods for use by DomStorageDispatcher directly.
DomStorageCachedArea* OpenCachedArea(
- int64 namespace_id, const GURL& origin);
+ int64 namespace_id, const GURL& origin, int64 storage_size);
void CloseCachedArea(DomStorageCachedArea* area);
DomStorageCachedArea* LookupCachedArea(
int64 namespace_id, const GURL& origin);
@@ -179,14 +180,14 @@ DomStorageDispatcher::ProxyImpl::ProxyImpl(RenderThreadImpl* sender)
}
DomStorageCachedArea* DomStorageDispatcher::ProxyImpl::OpenCachedArea(
- int64 namespace_id, const GURL& origin) {
+ int64 namespace_id, const GURL& origin, int64 storage_size) {
std::string key = GetCachedAreaKey(namespace_id, origin);
if (CachedAreaHolder* holder = GetAreaHolder(key)) {
++(holder->open_count_);
return holder->area_;
}
scoped_refptr<DomStorageCachedArea> area =
- new DomStorageCachedArea(namespace_id, origin, this);
+ new DomStorageCachedArea(namespace_id, origin, this, storage_size);
cached_areas_[key] = CachedAreaHolder(area, 1);
return area.get();
}
@@ -269,10 +270,17 @@ DomStorageDispatcher::~DomStorageDispatcher() {
scoped_refptr<DomStorageCachedArea> DomStorageDispatcher::OpenCachedArea(
int connection_id, int64 namespace_id, const GURL& origin) {
+ /*
RenderThreadImpl::current()->Send(
new DOMStorageHostMsg_OpenStorageArea(
connection_id, namespace_id, origin));
- return proxy_->OpenCachedArea(namespace_id, origin);
+ */
+ scoped_refptr<IPC::SyncMessageFilter> sync_msg_filter(
+ RenderThreadImpl::current()->sync_message_filter());
+ int64 storage_size = 0;
+ sync_msg_filter->Send(new DOMStorageHostMsg_OpenStorageArea(
+ connection_id, namespace_id, origin, &storage_size));
+ return proxy_->OpenCachedArea(namespace_id, origin, storage_size);
}
void DomStorageDispatcher::CloseCachedArea(
@@ -302,11 +310,15 @@ void DomStorageDispatcher::OnStorageEvent(
if (originated_in_process) {
originating_area = WebStorageAreaImpl::FromConnectionId(
params.connection_id);
+ originating_area->cached_area()->set_global_storage_size(
+ params.storage_size);
} else {
DomStorageCachedArea* cached_area = proxy_->LookupCachedArea(
params.namespace_id, params.origin);
- if (cached_area)
+ if (cached_area) {
cached_area->ApplyMutation(params.key, params.new_value);
+ cached_area->set_global_storage_size(params.storage_size);
+ }
}
if (params.namespace_id == dom_storage::kLocalStorageNamespaceId) {

Powered by Google App Engine
This is Rietveld 408576698