diff options
author | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-07 02:05:51 +0000 |
---|---|---|
committer | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-07 02:05:51 +0000 |
commit | 993e7d47846ce0278961eebab10cd784cf0e5381 (patch) | |
tree | 44d3b450e178b8a203be96790b5b098e807a1c3b /webkit/dom_storage/dom_storage_session.cc | |
parent | 2d5ed101523df1f3ded6d91fdbd0b4e7bcc53cf0 (diff) | |
download | chromium_src-993e7d47846ce0278961eebab10cd784cf0e5381.zip chromium_src-993e7d47846ce0278961eebab10cd784cf0e5381.tar.gz chromium_src-993e7d47846ce0278961eebab10cd784cf0e5381.tar.bz2 |
Framing for a DomStorage backend that does not depend on in-process-webkit. Only partial unittests coverage in this CL, more to come.
These classes aren't used yet.
Classes intended to be used by an embedder are DomStorageContext,DomStorageHost,
and DomStorageSession. The other classes are for internal consumption.
In general terms, the DomStorage object relationships are...
* Contexts (per-profile) own Namespaces which own Areas which share Maps.
* Hosts(per-renderer) refer to Namespaces and Areas open in it's renderer.
* Sessions (per-tab) cause the creation and deletion of session Namespaces.
Session Namespaces are cloned by initially making a shallow copy of
all contained Areas, the shallow copies refer to the same refcounted Map,
and does a deep copy-on-write if needed.
BUG=106763
Review URL: https://chromiumcodereview.appspot.com/9146025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@120687 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/dom_storage/dom_storage_session.cc')
-rw-r--r-- | webkit/dom_storage/dom_storage_session.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/webkit/dom_storage/dom_storage_session.cc b/webkit/dom_storage/dom_storage_session.cc new file mode 100644 index 0000000..3721505 --- /dev/null +++ b/webkit/dom_storage/dom_storage_session.cc @@ -0,0 +1,47 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "webkit/dom_storage/dom_storage_session.h" + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/logging.h" +#include "webkit/dom_storage/dom_storage_context.h" +#include "webkit/dom_storage/dom_storage_task_runner.h" + +namespace dom_storage { + +DomStorageSession::DomStorageSession(DomStorageContext* context) + : context_(context), + namespace_id_(context->AllocateSessionId()) { + context->task_runner()->PostTask( + FROM_HERE, + base::Bind(&DomStorageContext::CreateSessionNamespace, + context_, namespace_id_)); +} + +DomStorageSession* DomStorageSession::Clone() { + int64 clone_id = context_->AllocateSessionId(); + context_->task_runner()->PostTask( + FROM_HERE, + base::Bind(&DomStorageContext::CloneSessionNamespace, + context_, namespace_id_, clone_id)); + return new DomStorageSession(context_, clone_id); +} + +DomStorageSession::DomStorageSession(DomStorageContext* context, + int64 namespace_id) + : context_(context), + namespace_id_(namespace_id) { + // This ctor is intended for use by the Clone() method. +} + +DomStorageSession::~DomStorageSession() { + context_->task_runner()->PostTask( + FROM_HERE, + base::Bind(&DomStorageContext::DeleteSessionNamespace, + context_, namespace_id_)); +} + +} // namespace dom_storage |