Index: content/browser/dom_storage/session_storage_namespace_impl.cc |
diff --git a/content/browser/dom_storage/session_storage_namespace_impl.cc b/content/browser/dom_storage/session_storage_namespace_impl.cc |
index 6ec762d5d2d706206d4f50d350a6aadae9d11ce8..edee6a7cd64bc2d20f1469bd588767b883741c36 100644 |
--- a/content/browser/dom_storage/session_storage_namespace_impl.cc |
+++ b/content/browser/dom_storage/session_storage_namespace_impl.cc |
@@ -5,13 +5,28 @@ |
#include "content/browser/dom_storage/session_storage_namespace_impl.h" |
#include "content/browser/dom_storage/dom_storage_context_impl.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/notification_service.h" |
+#include "content/public/browser/notification_types.h" |
#include "webkit/dom_storage/dom_storage_session.h" |
using dom_storage::DomStorageSession; |
+SessionStorageAssociatedDetails::SessionStorageAssociatedDetails() { |
+} |
+ |
+SessionStorageAssociatedDetails::SessionStorageAssociatedDetails(int64 id, |
+ int64 real_id) |
+ : id(id), real_id(real_id) { |
+} |
+ |
+SessionStorageAssociatedDetails::~SessionStorageAssociatedDetails() { |
+} |
+ |
SessionStorageNamespaceImpl::SessionStorageNamespaceImpl( |
DOMStorageContextImpl* context) |
: session_(new DomStorageSession(context->context())) { |
+ session_->AddSessionStorageObserver(id(), this); |
} |
int64 SessionStorageNamespaceImpl::id() const { |
@@ -19,7 +34,26 @@ int64 SessionStorageNamespaceImpl::id() const { |
} |
SessionStorageNamespaceImpl* SessionStorageNamespaceImpl::Clone() { |
- return new SessionStorageNamespaceImpl(session_->Clone()); |
+ DomStorageSession* new_session = session_->Clone(); |
+ new_session->AddSessionStorageObserver(new_session->namespace_id(), this); |
+ return new SessionStorageNamespaceImpl(new_session); |
+} |
+ |
+void SessionStorageNamespaceImpl::OnSessionStorageNamespaceAssociated( |
+ int64 real_namespace_id) { |
+ if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) { |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::UI, FROM_HERE, base::Bind( |
+ &SessionStorageNamespaceImpl::OnSessionStorageNamespaceAssociated, |
+ this, real_namespace_id)); |
+ return; |
+ } |
+ |
+ SessionStorageAssociatedDetails details(id(), real_namespace_id); |
+ content::NotificationService::current()->Notify( |
+ content::NOTIFICATION_SESSION_STORAGE_ASSOCIATED, |
+ content::Source<SessionStorageNamespaceImpl>(this), |
+ content::Details<SessionStorageAssociatedDetails>(&details)); |
} |
SessionStorageNamespaceImpl::SessionStorageNamespaceImpl( |
@@ -28,4 +62,5 @@ SessionStorageNamespaceImpl::SessionStorageNamespaceImpl( |
} |
SessionStorageNamespaceImpl::~SessionStorageNamespaceImpl() { |
+ session_->RemoveSessionStorageObserver(session_->namespace_id()); |
} |