diff options
Diffstat (limited to 'content/browser/browser_context.cc')
-rw-r--r-- | content/browser/browser_context.cc | 182 |
1 files changed, 70 insertions, 112 deletions
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc index 15735c9..527fe43 100644 --- a/content/browser/browser_context.cc +++ b/content/browser/browser_context.cc @@ -11,8 +11,8 @@ #include "content/browser/in_process_webkit/indexed_db_context_impl.h" #include "content/browser/renderer_host/resource_dispatcher_host_impl.h" #include "content/public/browser/resource_context.h" -#include "content/browser/storage_partition.h" -#include "content/browser/storage_partition_map.h" +#include "content/browser/storage_partition_impl.h" +#include "content/browser/storage_partition_impl_map.h" #include "content/common/child_process_host_impl.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" @@ -35,53 +35,22 @@ namespace { StoragePartition* GetStoragePartitionByPartitionId( BrowserContext* browser_context, const std::string& partition_id) { - StoragePartitionMap* partition_map = static_cast<StoragePartitionMap*>( - browser_context->GetUserData(kStorageParitionMapKeyName)); + StoragePartitionImplMap* partition_map = + static_cast<StoragePartitionImplMap*>( + browser_context->GetUserData(kStorageParitionMapKeyName)); if (!partition_map) { - partition_map = new StoragePartitionMap(browser_context); + partition_map = new StoragePartitionImplMap(browser_context); browser_context->SetUserData(kStorageParitionMapKeyName, partition_map); } return partition_map->Get(partition_id); } -StoragePartition* GetStoragePartition(BrowserContext* browser_context, - int renderer_child_id) { - const std::string& partition_id = - GetContentClient()->browser()->GetStoragePartitionIdForChildProcess( - browser_context, - renderer_child_id); - - return GetStoragePartitionByPartitionId(browser_context, partition_id); -} - -// Run |callback| on each storage partition in |browser_context|. -void ForEachStoragePartition( - BrowserContext* browser_context, - const base::Callback<void(StoragePartition*)>& callback) { - StoragePartitionMap* partition_map = static_cast<StoragePartitionMap*>( - browser_context->GetUserData(kStorageParitionMapKeyName)); - if (!partition_map) { - return; - } - - partition_map->ForEach(callback); -} - -// Used to convert a callback meant to take a DOMStorageContextImpl* into one -// that can take a StoragePartition*. -void ProcessDOMStorageContext( - const base::Callback<void(DOMStorageContextImpl*)>& callback, - StoragePartition* partition) { - callback.Run(partition->dom_storage_context()); -} - // Run |callback| on each DOMStorageContextImpl in |browser_context|. -void ForEachDOMStorageContext( - BrowserContext* browser_context, - const base::Callback<void(DOMStorageContextImpl*)>& callback) { - ForEachStoragePartition(browser_context, - base::Bind(&ProcessDOMStorageContext, callback)); +void PurgeDOMStorageContextInPartition(const std::string& id, + StoragePartition* storage_partition) { + static_cast<StoragePartitionImpl*>(storage_partition)-> + GetDOMStorageContext()->PurgeMemory(); } void SaveSessionStateOnIOThread(ResourceContext* resource_context) { @@ -102,12 +71,6 @@ void PurgeMemoryOnIOThread(ResourceContext* resource_context) { ResourceContext::GetAppCacheService(resource_context)->PurgeMemory(); } -DOMStorageContextImpl* GetDefaultDOMStorageContextImpl( - BrowserContext* context) { - return static_cast<DOMStorageContextImpl*>( - BrowserContext::GetDefaultDOMStorageContext(context)); -} - } // namespace DownloadManager* BrowserContext::GetDownloadManager( @@ -134,87 +97,82 @@ DownloadManager* BrowserContext::GetDownloadManager( quota::QuotaManager* BrowserContext::GetQuotaManager( BrowserContext* browser_context) { - // TODO(ajwong): Change this API to require a process id instead of using - // kInvalidChildProcessId. - StoragePartition* partition = - GetStoragePartition(browser_context, - ChildProcessHostImpl::kInvalidChildProcessId); - return partition->quota_manager(); + // TODO(ajwong): Change this API to require a SiteInstance instead of + // using GetDefaultStoragePartition(). + return GetDefaultStoragePartition(browser_context)->GetQuotaManager(); } -DOMStorageContext* BrowserContext::GetDefaultDOMStorageContext( +IndexedDBContext* BrowserContext::GetIndexedDBContext( BrowserContext* browser_context) { - // TODO(ajwong): Force all users to know which process id they are performing - // actions on behalf of, migrate them to GetDOMStorageContext(), and then - // delete this function. - return GetDOMStorageContext(browser_context, - ChildProcessHostImpl::kInvalidChildProcessId); + // TODO(ajwong): Change this API to require a SiteInstance instead of + // using GetDefaultStoragePartition(). + return GetDefaultStoragePartition(browser_context)->GetIndexedDBContext(); } -DOMStorageContext* BrowserContext::GetDOMStorageContext( - BrowserContext* browser_context, - int render_child_id) { - StoragePartition* partition = - GetStoragePartition(browser_context, render_child_id); - return partition->dom_storage_context(); +webkit_database::DatabaseTracker* BrowserContext::GetDatabaseTracker( + BrowserContext* browser_context) { + // TODO(ajwong): Change this API to require a SiteInstance instead of + // using GetDefaultStoragePartition(). + return GetDefaultStoragePartition(browser_context)->GetDatabaseTracker(); } -DOMStorageContext* BrowserContext::GetDOMStorageContextByPartitionId( - BrowserContext* browser_context, - const std::string& partition_id) { - StoragePartition* partition = - GetStoragePartitionByPartitionId(browser_context, partition_id); - return partition->dom_storage_context(); +appcache::AppCacheService* BrowserContext::GetAppCacheService( + BrowserContext* browser_context) { + // TODO(ajwong): Change this API to require a SiteInstance instead of + // using GetDefaultStoragePartition(). + return GetDefaultStoragePartition(browser_context)->GetAppCacheService(); } -IndexedDBContext* BrowserContext::GetIndexedDBContext( +fileapi::FileSystemContext* BrowserContext::GetFileSystemContext( BrowserContext* browser_context) { - // TODO(ajwong): Change this API to require a process id instead of using - // kInvalidChildProcessId. - StoragePartition* partition = - GetStoragePartition(browser_context, - ChildProcessHostImpl::kInvalidChildProcessId); - return partition->indexed_db_context(); + // TODO(ajwong): Change this API to require a SiteInstance instead of + // using GetDefaultStoragePartition(). + return GetDefaultStoragePartition(browser_context)->GetFileSystemContext(); } -webkit_database::DatabaseTracker* BrowserContext::GetDatabaseTracker( - BrowserContext* browser_context) { - // TODO(ajwong): Change this API to require a process id instead of using - // kInvalidChildProcessId. - StoragePartition* partition = - GetStoragePartition(browser_context, - ChildProcessHostImpl::kInvalidChildProcessId); - return partition->database_tracker(); +StoragePartition* BrowserContext::GetStoragePartition( + BrowserContext* browser_context, + SiteInstance* site_instance) { + std::string partition_id; // Default to "" for NULL |site_instance|. + + // TODO(ajwong): After GetDefaultStoragePartition() is removed, get rid of + // this conditional and require that |site_instance| is non-NULL. + if (site_instance) { + partition_id = GetContentClient()->browser()-> + GetStoragePartitionIdForSiteInstance(browser_context, + site_instance); + } + + return GetStoragePartitionByPartitionId(browser_context, partition_id); } -appcache::AppCacheService* BrowserContext::GetAppCacheService( - BrowserContext* browser_context) { - // TODO(ajwong): Change this API to require a process id instead of using - // kInvalidChildProcessId. - StoragePartition* partition = - GetStoragePartition(browser_context, - ChildProcessHostImpl::kInvalidChildProcessId); - return partition->appcache_service(); +void BrowserContext::ForEachStoragePartition( + BrowserContext* browser_context, + const StoragePartitionCallback& callback) { + StoragePartitionImplMap* partition_map = + static_cast<StoragePartitionImplMap*>( + browser_context->GetUserData(kStorageParitionMapKeyName)); + if (!partition_map) + return; + + partition_map->ForEach(callback); } -fileapi::FileSystemContext* BrowserContext::GetFileSystemContext( +StoragePartition* BrowserContext::GetDefaultStoragePartition( BrowserContext* browser_context) { - // TODO(ajwong): Change this API to require a process id instead of using - // kInvalidChildProcessId. - StoragePartition* partition = - GetStoragePartition(browser_context, - ChildProcessHostImpl::kInvalidChildProcessId); - return partition->filesystem_context(); + return GetStoragePartition(browser_context, NULL); } void BrowserContext::EnsureResourceContextInitialized(BrowserContext* context) { // This will be enough to tickle initialization of BrowserContext if // necessary, which initializes ResourceContext. The reason we don't call - // ResourceContext::InitializeResourceContext directly here is that if - // ResourceContext ends up initializing it will call back into BrowserContext - // and when that call returns it'll end rewriting its UserData map (with the - // same value) but this causes a race condition. See http://crbug.com/115678. - GetStoragePartition(context, ChildProcessHostImpl::kInvalidChildProcessId); + // ResourceContext::InitializeResourceContext() directly here is that + // ResourceContext initialization may call back into BrowserContext + // and when that call returns it'll end rewriting its UserData map. It will + // end up rewriting the same value but this still causes a race condition. + // + // See http://crbug.com/115678. + GetDefaultStoragePartition(context); } void BrowserContext::SaveSessionState(BrowserContext* browser_context) { @@ -227,10 +185,10 @@ void BrowserContext::SaveSessionState(BrowserContext* browser_context) { browser_context->GetResourceContext())); } - // TODO(ajwong): This is the only usage of GetDefaultDOMStorageContextImpl(). - // After we migrate this to support multiple DOMStorageContexts, don't forget - // to remove the GetDefaultDOMStorageContextImpl() function as well. - GetDefaultDOMStorageContextImpl(browser_context)->SetForceKeepSessionState(); + DOMStorageContextImpl* dom_storage_context_impl = + static_cast<DOMStorageContextImpl*>( + GetDefaultStoragePartition(browser_context)->GetDOMStorageContext()); + dom_storage_context_impl->SetForceKeepSessionState(); if (BrowserThread::IsMessageLoopValid(BrowserThread::WEBKIT_DEPRECATED)) { IndexedDBContextImpl* indexed_db = static_cast<IndexedDBContextImpl*>( @@ -250,8 +208,8 @@ void BrowserContext::PurgeMemory(BrowserContext* browser_context) { browser_context->GetResourceContext())); } - ForEachDOMStorageContext(browser_context, - base::Bind(&DOMStorageContextImpl::PurgeMemory)); + ForEachStoragePartition(browser_context, + base::Bind(&PurgeDOMStorageContextInPartition)); } BrowserContext::~BrowserContext() { |