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

Unified Diff: webkit/dom_storage/dom_storage_namespace.cc

Issue 9963107: Persist sessionStorage on disk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 8 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: webkit/dom_storage/dom_storage_namespace.cc
diff --git a/webkit/dom_storage/dom_storage_namespace.cc b/webkit/dom_storage/dom_storage_namespace.cc
index 656d244345258d5328f384241e07c3e2b7652ab5..6044282cfed58beb43f1d775cc5d4845cf668b69 100644
--- a/webkit/dom_storage/dom_storage_namespace.cc
+++ b/webkit/dom_storage/dom_storage_namespace.cc
@@ -9,6 +9,7 @@
#include "webkit/dom_storage/dom_storage_area.h"
#include "webkit/dom_storage/dom_storage_task_runner.h"
#include "webkit/dom_storage/dom_storage_types.h"
+#include "webkit/dom_storage/session_storage_database.h"
namespace dom_storage {
@@ -28,7 +29,19 @@ DomStorageNamespace::DomStorageNamespace(
DCHECK_NE(kLocalStorageNamespaceId, namespace_id);
}
+DomStorageNamespace::DomStorageNamespace(
+ int64 namespace_id,
+ SessionStorageDatabase* session_storage_database,
+ DomStorageTaskRunner* task_runner)
+ : namespace_id_(namespace_id),
+ task_runner_(task_runner),
+ session_storage_database_(session_storage_database) {
+ DCHECK_NE(kLocalStorageNamespaceId, namespace_id);
+}
+
DomStorageNamespace::~DomStorageNamespace() {
+ if (session_storage_database_.get())
+ session_storage_database_->DeleteNamespace(namespace_id_);
}
DomStorageArea* DomStorageNamespace::OpenStorageArea(const GURL& origin) {
@@ -36,8 +49,18 @@ DomStorageArea* DomStorageNamespace::OpenStorageArea(const GURL& origin) {
++(holder->open_count_);
return holder->area_;
}
- DomStorageArea* area = new DomStorageArea(namespace_id_, origin,
- directory_, task_runner_);
+ DomStorageArea* area;
+ if (!directory_.empty()) {
+ // Local storage backed on disk.
+ area = new DomStorageArea(namespace_id_, origin, directory_, task_runner_);
+ } else if (session_storage_database_.get()) {
+ // Session storage backed on disk.
+ area = new DomStorageArea(namespace_id_, origin, session_storage_database_,
+ task_runner_);
+ } else {
+ // In-memory.
+ area = new DomStorageArea(namespace_id_, origin, task_runner_);
+ }
areas_[origin] = AreaHolder(area, 1);
return area;
}
@@ -54,8 +77,8 @@ void DomStorageNamespace::CloseStorageArea(DomStorageArea* area) {
DomStorageNamespace* DomStorageNamespace::Clone(int64 clone_namespace_id) {
DCHECK_NE(kLocalStorageNamespaceId, namespace_id_);
DCHECK_NE(kLocalStorageNamespaceId, clone_namespace_id);
- DomStorageNamespace* clone =
- new DomStorageNamespace(clone_namespace_id, task_runner_);
+ DomStorageNamespace* clone = new DomStorageNamespace(
+ clone_namespace_id, session_storage_database_, task_runner_);
AreaMap::const_iterator it = areas_.begin();
for (; it != areas_.end(); ++it) {
DomStorageArea* area = it->second.area_->ShallowCopy(clone_namespace_id);
@@ -74,6 +97,11 @@ void DomStorageNamespace::DeleteOrigin(const GURL& origin) {
scoped_refptr<DomStorageArea> area =
new DomStorageArea(namespace_id_, origin, directory_, task_runner_);
area->DeleteOrigin();
+ } else if (session_storage_database_.get()) {
+ scoped_refptr<DomStorageArea> area =
+ new DomStorageArea(namespace_id_, origin,
+ session_storage_database_.get(), task_runner_);
+ area->DeleteOrigin();
}
}

Powered by Google App Engine
This is Rietveld 408576698