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

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

Issue 10383123: Switch to using the async DomStorage IPC messages and add a caching layer … (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 7 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
« no previous file with comments | « content/renderer/dom_storage/webstoragearea_impl.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/dom_storage/webstoragearea_impl.cc
===================================================================
--- content/renderer/dom_storage/webstoragearea_impl.cc (revision 139572)
+++ content/renderer/dom_storage/webstoragearea_impl.cc (working copy)
@@ -9,98 +9,70 @@
#include "base/time.h"
#include "base/utf_string_conversions.h"
#include "content/common/dom_storage_messages.h"
+#include "content/renderer/dom_storage/dom_storage_dispatcher.h"
#include "content/renderer/render_thread_impl.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h"
-#include "webkit/dom_storage/dom_storage_types.h"
+#include "webkit/dom_storage/dom_storage_cached_area.h"
+using dom_storage::DomStorageCachedArea;
using WebKit::WebString;
using WebKit::WebURL;
+namespace {
typedef IDMap<WebStorageAreaImpl> AreaImplMap;
-
-static base::LazyInstance<AreaImplMap>::Leaky
+base::LazyInstance<AreaImplMap>::Leaky
g_all_areas_map = LAZY_INSTANCE_INITIALIZER;
+DomStorageDispatcher* dispatcher() {
+ return RenderThreadImpl::current()->dom_storage_dispatcher();
+}
+} // namespace
+
// static
-WebStorageAreaImpl* WebStorageAreaImpl::FromConnectionId(
- int id) {
+WebStorageAreaImpl* WebStorageAreaImpl::FromConnectionId(int id) {
return g_all_areas_map.Pointer()->Lookup(id);
}
WebStorageAreaImpl::WebStorageAreaImpl(
int64 namespace_id, const GURL& origin)
: ALLOW_THIS_IN_INITIALIZER_LIST(
- connection_id_(g_all_areas_map.Pointer()->Add(this))) {
- DCHECK(connection_id_);
- RenderThreadImpl::current()->Send(
- new DOMStorageHostMsg_OpenStorageArea(
- connection_id_, namespace_id, origin));
+ connection_id_(g_all_areas_map.Pointer()->Add(this))),
+ cached_area_(dispatcher()->
+ OpenCachedArea(connection_id_, namespace_id, origin)) {
}
WebStorageAreaImpl::~WebStorageAreaImpl() {
g_all_areas_map.Pointer()->Remove(connection_id_);
- RenderThreadImpl::current()->Send(
- new DOMStorageHostMsg_CloseStorageArea(connection_id_));
+ if (dispatcher())
+ dispatcher()->CloseCachedArea(connection_id_, cached_area_);
}
-// In November 2011 stats were recorded about performance of each of the
-// DOMStorage operations. Results of median, 99% quantile, and 99.9% quantile
-// are provided in milliseconds. The ratio of number of calls for each operation
-// relative to the number of calls to getItem is also provided.
-//
-// Operation Freq 50% 99% 99.9%
-// -------------------------------------------
-// getItem 1.00 0.6 2.0 27.9
-// setItem .029 0.7 13.6 114.9
-// removeItem .003 0.9 11.8 90.7
-// length .017 0.6 2.0 12.0
-// key .591 0.6 2.0 29.9
-// clear 1e-6 1.0 32.4 605.2
-
unsigned WebStorageAreaImpl::length() {
- unsigned length;
- RenderThreadImpl::current()->Send(
- new DOMStorageHostMsg_Length(connection_id_, &length));
- return length;
+ return cached_area_->GetLength(connection_id_);
}
WebString WebStorageAreaImpl::key(unsigned index) {
- NullableString16 key;
- RenderThreadImpl::current()->Send(
- new DOMStorageHostMsg_Key(connection_id_, index, &key));
- return key;
+ return cached_area_->GetKey(connection_id_, index);
}
WebString WebStorageAreaImpl::getItem(const WebString& key) {
- NullableString16 value;
- RenderThreadImpl::current()->Send(
- new DOMStorageHostMsg_GetItem(connection_id_, key, &value));
- return value;
+ return cached_area_->GetItem(connection_id_, key);
}
void WebStorageAreaImpl::setItem(
- const WebString& key, const WebString& value, const WebURL& url,
- WebStorageArea::Result& result, WebString& old_value_webkit) {
- if (key.length() + value.length() > dom_storage::kPerAreaQuota) {
+ const WebString& key, const WebString& value, const WebURL& page_url,
+ WebStorageArea::Result& result) {
+ if (!cached_area_->SetItem(connection_id_, key, value, page_url))
result = ResultBlockedByQuota;
- return;
- }
- NullableString16 old_value;
- RenderThreadImpl::current()->Send(new DOMStorageHostMsg_SetItem(
- connection_id_, key, value, url, &result, &old_value));
- old_value_webkit = old_value;
+ else
+ result = ResultOK;
}
void WebStorageAreaImpl::removeItem(
- const WebString& key, const WebURL& url, WebString& old_value_webkit) {
- NullableString16 old_value;
- RenderThreadImpl::current()->Send(
- new DOMStorageHostMsg_RemoveItem(connection_id_, key, url, &old_value));
- old_value_webkit = old_value;
+ const WebString& key, const WebURL& page_url) {
+ cached_area_->RemoveItem(connection_id_, key, page_url);
}
-void WebStorageAreaImpl::clear(
- const WebURL& url, bool& cleared_something) {
- RenderThreadImpl::current()->Send(
- new DOMStorageHostMsg_Clear(connection_id_, url, &cleared_something));
+void WebStorageAreaImpl::clear(const WebURL& page_url) {
+ cached_area_->Clear(connection_id_, page_url);
}
« no previous file with comments | « content/renderer/dom_storage/webstoragearea_impl.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698