Chromium Code Reviews| 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..3dad1a4f2c5aeadbfe7dd5e6a6cee1a99a4e2afe 100644 |
| --- a/content/browser/storage_partition_impl.cc |
| +++ b/content/browser/storage_partition_impl.cc |
| @@ -12,6 +12,44 @@ |
| namespace content { |
| +namespace { |
| + |
| +// 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 contains an extensions 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 with persistent storage. Example: |
|
Charlie Reis
2012/09/14 22:37:31
nit: This still isn't quite right, since you can h
awong
2012/09/14 23:01:22
reworded.
|
| +// |
| +// {kStoragePartitionDirname}/extensions/ABCDEF/default |
| +// {kStoragePartitionDirname}/extensions/ABCDEF/{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 kDefaultPartitionDirname[] = "default"; |
| + |
| +} // namespace |
| + |
| +FilePath StoragePartition::GetPartitionPath(const FilePath& profile_path, |
|
Charlie Reis
2012/09/14 22:37:31
nit: // static
awong
2012/09/14 23:01:22
Done.
|
| + const std::string& partition_id) { |
| + if (partition_id.empty()) { |
| + // The default profile just sits inside the top-level profile directory. |
| + return profile_path; |
| + } |
| + |
| + // TODO(ajwong): This should check we create a valid path name. |
| + CHECK(IsStringASCII(partition_id)); |
| + return profile_path.Append(kStoragePartitionDirname) |
| + .AppendASCII(kExtensionsDirname) |
| + .AppendASCII(partition_id) |
| + .AppendASCII(kDefaultPartitionDirname); |
| +} |
| + |
| StoragePartitionImpl::StoragePartitionImpl( |
| const FilePath& partition_path, |
| quota::QuotaManager* quota_manager, |
| @@ -47,12 +85,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 +142,10 @@ StoragePartitionImpl* StoragePartitionImpl::Create( |
| indexed_db_context); |
| } |
| +FilePath StoragePartitionImpl::GetPath() { |
| + return partition_path_; |
| +} |
| + |
| quota::QuotaManager* StoragePartitionImpl::GetQuotaManager() { |
| return quota_manager_; |
| } |