Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(516)

Unified Diff: content/browser/storage_partition_impl.cc

Issue 10913265: Redo the Storage Partition directory layout to support guest tags and origin based partitions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Make world consistent. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/storage_partition_impl.cc
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index e906a6acb8dc22a68ba429db5a1370496b5a01d4..e9a08f3fbebaa23e4e90b7fae4c252bff684fd0c 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -12,6 +12,40 @@
namespace content {
+// These constants are used to create the directory structure under the profile
+// where renderers with a non-default storage partition keep their persistent
+// state. This will contain a set of directories that partially mirror the
+// directory structure of BrowserContext::GetPath().
+//
+// The kStoragePartitionDirname is subdivided into an extensions
Charlie Reis 2012/09/14 21:03:13 nit: is subdivided into -> contains (Not much of a
awong 2012/09/14 22:26:06 Done.
+// directory which is further partitioned by extension id, followed
+// by another level of directories for the "default" extension storage partition
+// and one directory for each browser tag. Example:
Charlie Reis 2012/09/14 21:03:13 nit: browser tag -> persistent browser tag partiti
awong 2012/09/14 22:26:06 Done.
+//
+// {kStoragePartitionDirname}/extensions/ABCEDF/default
Charlie Reis 2012/09/14 21:03:13 nit: ABCDEF? :)
awong 2012/09/14 22:26:06 Done.
+// {kStoragePartitionDirname}/extensions/ABCEDF/{hash(guest partition)}
+//
+// The code in GetPartitionPath() constructs these path names.
+const FilePath::CharType kStoragePartitionDirname[] =
+ FILE_PATH_LITERAL("Storage Partitions");
+const char kExtensionsDirname[] = "extensions";
+const char kDefaultDirname[] = "default";
Charlie Reis 2012/09/14 21:03:13 kDefaultDirname is pretty vague for something in t
awong 2012/09/14 22:26:07 moved all these into an anonymous namespace. Tec
+
+FilePath StoragePartition::GetPartitionPath(const FilePath& profile_path,
+ const std::string& partition_id) {
+ if (partition_id.empty()) {
+ // The default profile just sits inside the top-level directory.
Charlie Reis 2012/09/14 21:03:13 nit: top-level profile directory.
awong 2012/09/14 22:26:07 Done.
+ return profile_path;
+ }
+
+ // TODO(ajwong): This should check the path is valid?
Charlie Reis 2012/09/14 21:03:13 Valid in what sense? We don't want to go to disk
awong 2012/09/14 22:26:07 Done.
+ CHECK(IsStringASCII(partition_id));
+ return profile_path.Append(kStoragePartitionDirname)
+ .AppendASCII(kExtensionsDirname)
+ .AppendASCII(partition_id)
+ .AppendASCII(kDefaultDirname);
Charlie Reis 2012/09/14 21:03:13 Do we expect to have something like a separate Get
awong 2012/09/14 22:26:07 Nope. I expect this function to get more complicat
+}
+
StoragePartitionImpl::StoragePartitionImpl(
const FilePath& partition_path,
quota::QuotaManager* quota_manager,
@@ -47,12 +81,17 @@ StoragePartitionImpl::~StoragePartitionImpl() {
// need 3 pieces of info from it.
StoragePartitionImpl* StoragePartitionImpl::Create(
BrowserContext* context,
- const FilePath& partition_path) {
+ const std::string& partition_id,
+ const FilePath& profile_path) {
// Ensure that these methods are called on the UI thread, except for
// unittests where a UI thread might not have been created.
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
!BrowserThread::IsMessageLoopValid(BrowserThread::UI));
+ FilePath partition_path =
+ StoragePartition::GetPartitionPath(context->GetPath(),
+ partition_id);
+
// All of the clients have to be created and registered with the
// QuotaManager prior to the QuotaManger being used. We do them
// all together here prior to handing out a reference to anything
@@ -99,6 +138,10 @@ StoragePartitionImpl* StoragePartitionImpl::Create(
indexed_db_context);
}
+FilePath StoragePartitionImpl::GetPath() {
+ return partition_path_;
+}
+
quota::QuotaManager* StoragePartitionImpl::GetQuotaManager() {
return quota_manager_;
}

Powered by Google App Engine
This is Rietveld 408576698