OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/dom_storage/session_storage_namespace_impl.h" | 5 #include "content/browser/dom_storage/session_storage_namespace_impl.h" |
6 | 6 |
7 #include "content/browser/dom_storage/dom_storage_context_impl.h" | 7 #include "content/browser/dom_storage/dom_storage_context_impl.h" |
| 8 #include "content/public/browser/browser_thread.h" |
| 9 #include "content/public/browser/notification_service.h" |
| 10 #include "content/public/browser/notification_types.h" |
8 #include "webkit/dom_storage/dom_storage_session.h" | 11 #include "webkit/dom_storage/dom_storage_session.h" |
9 | 12 |
10 using dom_storage::DomStorageSession; | 13 using dom_storage::DomStorageSession; |
11 | 14 |
| 15 SessionStorageAssociatedDetails::SessionStorageAssociatedDetails() { |
| 16 } |
| 17 |
| 18 SessionStorageAssociatedDetails::SessionStorageAssociatedDetails(int64 id, |
| 19 int64 real_id) |
| 20 : id(id), real_id(real_id) { |
| 21 } |
| 22 |
| 23 SessionStorageAssociatedDetails::~SessionStorageAssociatedDetails() { |
| 24 } |
| 25 |
12 SessionStorageNamespaceImpl::SessionStorageNamespaceImpl( | 26 SessionStorageNamespaceImpl::SessionStorageNamespaceImpl( |
13 DOMStorageContextImpl* context) | 27 DOMStorageContextImpl* context) |
14 : session_(new DomStorageSession(context->context())) { | 28 : session_(new DomStorageSession(context->context())) { |
| 29 session_->AddSessionStorageObserver(id(), this); |
15 } | 30 } |
16 | 31 |
17 int64 SessionStorageNamespaceImpl::id() const { | 32 int64 SessionStorageNamespaceImpl::id() const { |
18 return session_->namespace_id(); | 33 return session_->namespace_id(); |
19 } | 34 } |
20 | 35 |
21 SessionStorageNamespaceImpl* SessionStorageNamespaceImpl::Clone() { | 36 SessionStorageNamespaceImpl* SessionStorageNamespaceImpl::Clone() { |
22 return new SessionStorageNamespaceImpl(session_->Clone()); | 37 DomStorageSession* new_session = session_->Clone(); |
| 38 new_session->AddSessionStorageObserver(new_session->namespace_id(), this); |
| 39 return new SessionStorageNamespaceImpl(new_session); |
| 40 } |
| 41 |
| 42 void SessionStorageNamespaceImpl::OnSessionStorageNamespaceAssociated( |
| 43 int64 real_namespace_id) { |
| 44 if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) { |
| 45 content::BrowserThread::PostTask( |
| 46 content::BrowserThread::UI, FROM_HERE, base::Bind( |
| 47 &SessionStorageNamespaceImpl::OnSessionStorageNamespaceAssociated, |
| 48 this, real_namespace_id)); |
| 49 return; |
| 50 } |
| 51 |
| 52 SessionStorageAssociatedDetails details(id(), real_namespace_id); |
| 53 content::NotificationService::current()->Notify( |
| 54 content::NOTIFICATION_SESSION_STORAGE_ASSOCIATED, |
| 55 content::Source<SessionStorageNamespaceImpl>(this), |
| 56 content::Details<SessionStorageAssociatedDetails>(&details)); |
23 } | 57 } |
24 | 58 |
25 SessionStorageNamespaceImpl::SessionStorageNamespaceImpl( | 59 SessionStorageNamespaceImpl::SessionStorageNamespaceImpl( |
26 DomStorageSession* clone) | 60 DomStorageSession* clone) |
27 : session_(clone) { | 61 : session_(clone) { |
28 } | 62 } |
29 | 63 |
30 SessionStorageNamespaceImpl::~SessionStorageNamespaceImpl() { | 64 SessionStorageNamespaceImpl::~SessionStorageNamespaceImpl() { |
| 65 session_->RemoveSessionStorageObserver(session_->namespace_id()); |
31 } | 66 } |
OLD | NEW |