1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/browser/dom_storage/dom_storage_session.h"
8 #include "base/bind_helpers.h"
9 #include "base/logging.h"
10 #include "base/tracked_objects.h"
11 #include "content/browser/dom_storage/dom_storage_context_impl.h"
12 #include "content/browser/dom_storage/dom_storage_task_runner.h"
16 DOMStorageSession::DOMStorageSession(DOMStorageContextImpl
* context
)
18 namespace_id_(context
->AllocateSessionId()),
19 persistent_namespace_id_(context
->AllocatePersistentSessionId()),
20 should_persist_(false) {
21 context
->task_runner()->PostTask(
23 base::Bind(&DOMStorageContextImpl::CreateSessionNamespace
,
24 context_
, namespace_id_
, persistent_namespace_id_
));
27 DOMStorageSession::DOMStorageSession(DOMStorageContextImpl
* context
,
28 const std::string
& persistent_namespace_id
)
30 namespace_id_(context
->AllocateSessionId()),
31 persistent_namespace_id_(persistent_namespace_id
),
32 should_persist_(false) {
33 context
->task_runner()->PostTask(
35 base::Bind(&DOMStorageContextImpl::CreateSessionNamespace
,
36 context_
, namespace_id_
, persistent_namespace_id_
));
39 void DOMStorageSession::SetShouldPersist(bool should_persist
) {
40 should_persist_
= should_persist
;
43 bool DOMStorageSession::should_persist() const {
44 return should_persist_
;
47 bool DOMStorageSession::IsFromContext(DOMStorageContextImpl
* context
) {
48 return context_
.get() == context
;
51 DOMStorageSession
* DOMStorageSession::Clone() {
52 return CloneFrom(context_
.get(), namespace_id_
);
56 DOMStorageSession
* DOMStorageSession::CloneFrom(DOMStorageContextImpl
* context
,
57 int64 namepace_id_to_clone
) {
58 int64 clone_id
= context
->AllocateSessionId();
59 std::string persistent_clone_id
= context
->AllocatePersistentSessionId();
60 context
->task_runner()->PostTask(
62 base::Bind(&DOMStorageContextImpl::CloneSessionNamespace
,
63 context
, namepace_id_to_clone
, clone_id
, persistent_clone_id
));
64 return new DOMStorageSession(context
, clone_id
, persistent_clone_id
);
67 DOMStorageSession::DOMStorageSession(DOMStorageContextImpl
* context
,
69 const std::string
& persistent_namespace_id
)
71 namespace_id_(namespace_id
),
72 persistent_namespace_id_(persistent_namespace_id
),
73 should_persist_(false) {
74 // This ctor is intended for use by the Clone() method.
77 DOMStorageSession::~DOMStorageSession() {
78 context_
->task_runner()->PostTask(
80 base::Bind(&DOMStorageContextImpl::DeleteSessionNamespace
,
81 context_
, namespace_id_
, should_persist_
));
84 } // namespace content