| Index: content/browser/in_process_webkit/dom_storage_namespace.cc
|
| diff --git a/content/browser/in_process_webkit/dom_storage_namespace.cc b/content/browser/in_process_webkit/dom_storage_namespace.cc
|
| index 508786f1aaf58d7d8ba23b01793775028de8a052..1be4142ceac36479464043c88a47add389e78bef 100644
|
| --- a/content/browser/in_process_webkit/dom_storage_namespace.cc
|
| +++ b/content/browser/in_process_webkit/dom_storage_namespace.cc
|
| @@ -21,24 +21,29 @@ DOMStorageNamespace* DOMStorageNamespace::CreateLocalStorageNamespace(
|
| DOMStorageContext* dom_storage_context, const FilePath& data_dir_path) {
|
| int64 id = kLocalStorageNamespaceId;
|
| DCHECK(!dom_storage_context->GetStorageNamespace(id, false));
|
| - return new DOMStorageNamespace(dom_storage_context, id,
|
| + return new DOMStorageNamespace(dom_storage_context, id, FilePath(""),
|
| webkit_glue::FilePathToWebString(data_dir_path), DOM_STORAGE_LOCAL);
|
| }
|
|
|
| /* static */
|
| DOMStorageNamespace* DOMStorageNamespace::CreateSessionStorageNamespace(
|
| - DOMStorageContext* dom_storage_context, int64 id) {
|
| + DOMStorageContext* dom_storage_context, const FilePath& data_dir_path,
|
| + int64 id) {
|
| DCHECK(!dom_storage_context->GetStorageNamespace(id, false));
|
| - return new DOMStorageNamespace(dom_storage_context, id, WebString(),
|
| - DOM_STORAGE_SESSION);
|
| + return new DOMStorageNamespace(
|
| + dom_storage_context, id, data_dir_path.BaseName(),
|
| + webkit_glue::FilePathToWebString(data_dir_path), DOM_STORAGE_SESSION);
|
| }
|
|
|
| -DOMStorageNamespace::DOMStorageNamespace(DOMStorageContext* dom_storage_context,
|
| - int64 id,
|
| - const WebString& data_dir_path,
|
| - DOMStorageType dom_storage_type)
|
| +DOMStorageNamespace::DOMStorageNamespace(
|
| + DOMStorageContext* dom_storage_context,
|
| + int64 id,
|
| + const FilePath& session_storage_directory,
|
| + const WebString& data_dir_path,
|
| + DOMStorageType dom_storage_type)
|
| : dom_storage_context_(dom_storage_context),
|
| id_(id),
|
| + session_storage_directory_(session_storage_directory),
|
| data_dir_path_(data_dir_path),
|
| dom_storage_type_(dom_storage_type) {
|
| DCHECK(dom_storage_context_);
|
| @@ -73,7 +78,8 @@ DOMStorageNamespace* DOMStorageNamespace::Copy(int64 id) {
|
| DCHECK(dom_storage_type_ == DOM_STORAGE_SESSION);
|
| DCHECK(!dom_storage_context_->GetStorageNamespace(id, false));
|
| DOMStorageNamespace* new_storage_namespace = new DOMStorageNamespace(
|
| - dom_storage_context_, id, data_dir_path_, dom_storage_type_);
|
| + dom_storage_context_, id, session_storage_directory_, data_dir_path_,
|
| + dom_storage_type_);
|
| // If we haven't used the namespace yet, there's nothing to copy.
|
| if (storage_namespace_.get())
|
| new_storage_namespace->storage_namespace_.reset(storage_namespace_->copy());
|
| @@ -81,7 +87,6 @@ DOMStorageNamespace* DOMStorageNamespace::Copy(int64 id) {
|
| }
|
|
|
| void DOMStorageNamespace::PurgeMemory() {
|
| - DCHECK(dom_storage_type_ == DOM_STORAGE_LOCAL);
|
| for (OriginToStorageAreaMap::iterator iter(origin_to_storage_area_.begin());
|
| iter != origin_to_storage_area_.end(); ++iter)
|
| iter->second->PurgeMemory();
|
| @@ -94,16 +99,39 @@ WebStorageArea* DOMStorageNamespace::CreateWebStorageArea(
|
| return storage_namespace_->createStorageArea(origin);
|
| }
|
|
|
| +void DOMStorageNamespace::CopyDataTo(DOMStorageNamespace* other) {
|
| + for (OriginToStorageAreaMap::iterator iter(origin_to_storage_area_.begin());
|
| + iter != origin_to_storage_area_.end(); ++iter) {
|
| + DOMStorageArea* to_area = other->GetStorageArea(iter->first);
|
| + DCHECK(to_area);
|
| + iter->second->CopyDataTo(to_area);
|
| + }
|
| +}
|
| +
|
| void DOMStorageNamespace::CreateWebStorageNamespaceIfNecessary() {
|
| if (storage_namespace_.get())
|
| return;
|
|
|
| - if (dom_storage_type_ == DOM_STORAGE_LOCAL) {
|
| - storage_namespace_.reset(
|
| - WebStorageNamespace::createLocalStorageNamespace(data_dir_path_,
|
| - WebStorageNamespace::m_localStorageQuota));
|
| - } else {
|
| + // From WebKit point of view, also sessionStorage is localStorage, since we
|
| + // want to save it on disk. (Except for incognito.)
|
| + if (dom_storage_type_ == DOM_STORAGE_SESSION &&
|
| + data_dir_path_.isEmpty()) {
|
| storage_namespace_.reset(WebStorageNamespace::createSessionStorageNamespace(
|
| WebStorageNamespace::m_sessionStorageQuota));
|
| + } else {
|
| + storage_namespace_.reset(
|
| + WebStorageNamespace::createLocalStorageNamespace(
|
| + data_dir_path_,
|
| + WebStorageNamespace::m_localStorageQuota));
|
| }
|
| }
|
| +
|
| +SessionStorageCreatedDetails::SessionStorageCreatedDetails() { }
|
| +
|
| +SessionStorageCreatedDetails::SessionStorageCreatedDetails(
|
| + int64 id,
|
| + const FilePath& session_storage_directory)
|
| + : id(id),
|
| + session_storage_directory(session_storage_directory) { }
|
| +
|
| +SessionStorageCreatedDetails::~SessionStorageCreatedDetails() { }
|
|
|