| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/public/browser/browser_context.h" | 5 #include "content/public/browser/browser_context.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 |
| 9 #include <algorithm> | 10 #include <algorithm> |
| 10 #include <limits> | 11 #include <limits> |
| 11 #include <memory> | 12 #include <memory> |
| 12 #include <utility> | 13 #include <utility> |
| 13 #include <vector> | 14 #include <vector> |
| 14 | 15 |
| 15 #include "base/command_line.h" | 16 #include "base/command_line.h" |
| 16 #include "base/guid.h" | 17 #include "base/guid.h" |
| 17 #include "base/lazy_instance.h" | 18 #include "base/lazy_instance.h" |
| 18 #include "base/macros.h" | 19 #include "base/macros.h" |
| 20 #include "base/memory/ptr_util.h" |
| 19 #include "base/rand_util.h" | 21 #include "base/rand_util.h" |
| 20 #include "base/threading/thread_task_runner_handle.h" | 22 #include "base/threading/thread_task_runner_handle.h" |
| 21 #include "build/build_config.h" | 23 #include "build/build_config.h" |
| 22 #include "content/browser/blob_storage/chrome_blob_storage_context.h" | 24 #include "content/browser/blob_storage/chrome_blob_storage_context.h" |
| 23 #include "content/browser/download/download_manager_impl.h" | 25 #include "content/browser/download/download_manager_impl.h" |
| 24 #include "content/browser/indexed_db/indexed_db_context_impl.h" | 26 #include "content/browser/indexed_db/indexed_db_context_impl.h" |
| 25 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 27 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 26 #include "content/browser/push_messaging/push_messaging_router.h" | 28 #include "content/browser/push_messaging/push_messaging_router.h" |
| 27 #include "content/browser/storage_partition_impl_map.h" | 29 #include "content/browser/storage_partition_impl_map.h" |
| 28 #include "content/common/child_process_host_impl.h" | 30 #include "content/common/child_process_host_impl.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 g_user_id_to_context.Get().erase(it); | 92 g_user_id_to_context.Get().erase(it); |
| 91 } | 93 } |
| 92 } | 94 } |
| 93 | 95 |
| 94 StoragePartitionImplMap* GetStoragePartitionMap( | 96 StoragePartitionImplMap* GetStoragePartitionMap( |
| 95 BrowserContext* browser_context) { | 97 BrowserContext* browser_context) { |
| 96 StoragePartitionImplMap* partition_map = | 98 StoragePartitionImplMap* partition_map = |
| 97 static_cast<StoragePartitionImplMap*>( | 99 static_cast<StoragePartitionImplMap*>( |
| 98 browser_context->GetUserData(kStoragePartitionMapKeyName)); | 100 browser_context->GetUserData(kStoragePartitionMapKeyName)); |
| 99 if (!partition_map) { | 101 if (!partition_map) { |
| 100 partition_map = new StoragePartitionImplMap(browser_context); | 102 auto partition_map_owned = |
| 101 browser_context->SetUserData(kStoragePartitionMapKeyName, partition_map); | 103 base::MakeUnique<StoragePartitionImplMap>(browser_context); |
| 104 partition_map = partition_map_owned.get(); |
| 105 browser_context->SetUserData(kStoragePartitionMapKeyName, |
| 106 std::move(partition_map_owned)); |
| 102 } | 107 } |
| 103 return partition_map; | 108 return partition_map; |
| 104 } | 109 } |
| 105 | 110 |
| 106 StoragePartition* GetStoragePartitionFromConfig( | 111 StoragePartition* GetStoragePartitionFromConfig( |
| 107 BrowserContext* browser_context, | 112 BrowserContext* browser_context, |
| 108 const std::string& partition_domain, | 113 const std::string& partition_domain, |
| 109 const std::string& partition_name, | 114 const std::string& partition_name, |
| 110 bool in_memory) { | 115 bool in_memory) { |
| 111 StoragePartitionImplMap* partition_map = | 116 StoragePartitionImplMap* partition_map = |
| (...skipping 20 matching lines...) Expand all Loading... |
| 132 indexed_db_context->SetForceKeepSessionState(); | 137 indexed_db_context->SetForceKeepSessionState(); |
| 133 } | 138 } |
| 134 | 139 |
| 135 void ShutdownServiceWorkerContext(StoragePartition* partition) { | 140 void ShutdownServiceWorkerContext(StoragePartition* partition) { |
| 136 ServiceWorkerContextWrapper* wrapper = | 141 ServiceWorkerContextWrapper* wrapper = |
| 137 static_cast<ServiceWorkerContextWrapper*>( | 142 static_cast<ServiceWorkerContextWrapper*>( |
| 138 partition->GetServiceWorkerContext()); | 143 partition->GetServiceWorkerContext()); |
| 139 wrapper->process_manager()->Shutdown(); | 144 wrapper->process_manager()->Shutdown(); |
| 140 } | 145 } |
| 141 | 146 |
| 142 void SetDownloadManager(BrowserContext* context, | 147 void SetDownloadManager( |
| 143 content::DownloadManager* download_manager) { | 148 BrowserContext* context, |
| 149 std::unique_ptr<content::DownloadManager> download_manager) { |
| 144 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 150 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 145 DCHECK(download_manager); | 151 DCHECK(download_manager); |
| 146 context->SetUserData(kDownloadManagerKeyName, download_manager); | 152 context->SetUserData(kDownloadManagerKeyName, std::move(download_manager)); |
| 147 } | 153 } |
| 148 | 154 |
| 149 class BrowserContextServiceManagerConnectionHolder | 155 class BrowserContextServiceManagerConnectionHolder |
| 150 : public base::SupportsUserData::Data { | 156 : public base::SupportsUserData::Data { |
| 151 public: | 157 public: |
| 152 explicit BrowserContextServiceManagerConnectionHolder( | 158 explicit BrowserContextServiceManagerConnectionHolder( |
| 153 service_manager::mojom::ServiceRequest request) | 159 service_manager::mojom::ServiceRequest request) |
| 154 : service_manager_connection_(ServiceManagerConnection::Create( | 160 : service_manager_connection_(ServiceManagerConnection::Create( |
| 155 std::move(request), | 161 std::move(request), |
| 156 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))) {} | 162 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))) {} |
| (...skipping 30 matching lines...) Expand all Loading... |
| 187 } | 193 } |
| 188 | 194 |
| 189 DownloadManager* BrowserContext::GetDownloadManager( | 195 DownloadManager* BrowserContext::GetDownloadManager( |
| 190 BrowserContext* context) { | 196 BrowserContext* context) { |
| 191 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 197 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 192 if (!context->GetUserData(kDownloadManagerKeyName)) { | 198 if (!context->GetUserData(kDownloadManagerKeyName)) { |
| 193 DownloadManager* download_manager = | 199 DownloadManager* download_manager = |
| 194 new DownloadManagerImpl( | 200 new DownloadManagerImpl( |
| 195 GetContentClient()->browser()->GetNetLog(), context); | 201 GetContentClient()->browser()->GetNetLog(), context); |
| 196 | 202 |
| 197 SetDownloadManager(context, download_manager); | 203 SetDownloadManager(context, base::WrapUnique(download_manager)); |
| 198 download_manager->SetDelegate(context->GetDownloadManagerDelegate()); | 204 download_manager->SetDelegate(context->GetDownloadManagerDelegate()); |
| 199 } | 205 } |
| 200 | 206 |
| 201 return static_cast<DownloadManager*>( | 207 return static_cast<DownloadManager*>( |
| 202 context->GetUserData(kDownloadManagerKeyName)); | 208 context->GetUserData(kDownloadManagerKeyName)); |
| 203 } | 209 } |
| 204 | 210 |
| 205 // static | 211 // static |
| 206 storage::ExternalMountPoints* BrowserContext::GetMountPoints( | 212 storage::ExternalMountPoints* BrowserContext::GetMountPoints( |
| 207 BrowserContext* context) { | 213 BrowserContext* context) { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 if (indexed_db_context_impl->TaskRunner()) { | 391 if (indexed_db_context_impl->TaskRunner()) { |
| 386 indexed_db_context_impl->TaskRunner()->PostTask( | 392 indexed_db_context_impl->TaskRunner()->PostTask( |
| 387 FROM_HERE, | 393 FROM_HERE, |
| 388 base::Bind(&SaveSessionStateOnIndexedDBThread, | 394 base::Bind(&SaveSessionStateOnIndexedDBThread, |
| 389 make_scoped_refptr(indexed_db_context_impl))); | 395 make_scoped_refptr(indexed_db_context_impl))); |
| 390 } | 396 } |
| 391 } | 397 } |
| 392 | 398 |
| 393 void BrowserContext::SetDownloadManagerForTesting( | 399 void BrowserContext::SetDownloadManagerForTesting( |
| 394 BrowserContext* browser_context, | 400 BrowserContext* browser_context, |
| 395 DownloadManager* download_manager) { | 401 std::unique_ptr<content::DownloadManager> download_manager) { |
| 396 SetDownloadManager(browser_context, download_manager); | 402 SetDownloadManager(browser_context, std::move(download_manager)); |
| 397 } | 403 } |
| 398 | 404 |
| 399 // static | 405 // static |
| 400 void BrowserContext::Initialize( | 406 void BrowserContext::Initialize( |
| 401 BrowserContext* browser_context, | 407 BrowserContext* browser_context, |
| 402 const base::FilePath& path) { | 408 const base::FilePath& path) { |
| 403 | 409 |
| 404 std::string new_id; | 410 std::string new_id; |
| 405 if (GetContentClient() && GetContentClient()->browser()) { | 411 if (GetContentClient() && GetContentClient()->browser()) { |
| 406 new_id = GetContentClient()->browser()->GetServiceUserIdForBrowserContext( | 412 new_id = GetContentClient()->browser()->GetServiceUserIdForBrowserContext( |
| 407 browser_context); | 413 browser_context); |
| 408 } else { | 414 } else { |
| 409 // Some test scenarios initialize a BrowserContext without a content client. | 415 // Some test scenarios initialize a BrowserContext without a content client. |
| 410 new_id = base::GenerateGUID(); | 416 new_id = base::GenerateGUID(); |
| 411 } | 417 } |
| 412 | 418 |
| 413 ServiceUserIdHolder* holder = static_cast<ServiceUserIdHolder*>( | 419 ServiceUserIdHolder* holder = static_cast<ServiceUserIdHolder*>( |
| 414 browser_context->GetUserData(kServiceUserId)); | 420 browser_context->GetUserData(kServiceUserId)); |
| 415 if (holder) | 421 if (holder) |
| 416 file::ForgetServiceUserIdUserDirAssociation(holder->user_id()); | 422 file::ForgetServiceUserIdUserDirAssociation(holder->user_id()); |
| 417 file::AssociateServiceUserIdWithUserDir(new_id, path); | 423 file::AssociateServiceUserIdWithUserDir(new_id, path); |
| 418 RemoveBrowserContextFromUserIdMap(browser_context); | 424 RemoveBrowserContextFromUserIdMap(browser_context); |
| 419 g_user_id_to_context.Get()[new_id] = browser_context; | 425 g_user_id_to_context.Get()[new_id] = browser_context; |
| 420 browser_context->SetUserData(kServiceUserId, | 426 browser_context->SetUserData(kServiceUserId, |
| 421 new ServiceUserIdHolder(new_id)); | 427 base::MakeUnique<ServiceUserIdHolder>(new_id)); |
| 422 | 428 |
| 423 browser_context->SetUserData(kMojoWasInitialized, | 429 browser_context->SetUserData( |
| 424 new base::SupportsUserData::Data); | 430 kMojoWasInitialized, base::MakeUnique<base::SupportsUserData::Data>()); |
| 425 | 431 |
| 426 ServiceManagerConnection* service_manager_connection = | 432 ServiceManagerConnection* service_manager_connection = |
| 427 ServiceManagerConnection::GetForProcess(); | 433 ServiceManagerConnection::GetForProcess(); |
| 428 if (service_manager_connection && base::ThreadTaskRunnerHandle::IsSet()) { | 434 if (service_manager_connection && base::ThreadTaskRunnerHandle::IsSet()) { |
| 429 // NOTE: Many unit tests create a TestBrowserContext without initializing | 435 // NOTE: Many unit tests create a TestBrowserContext without initializing |
| 430 // Mojo or the global service manager connection. | 436 // Mojo or the global service manager connection. |
| 431 | 437 |
| 432 service_manager::mojom::ServicePtr service; | 438 service_manager::mojom::ServicePtr service; |
| 433 service_manager::mojom::ServiceRequest service_request(&service); | 439 service_manager::mojom::ServiceRequest service_request(&service); |
| 434 | 440 |
| 435 service_manager::mojom::PIDReceiverPtr pid_receiver; | 441 service_manager::mojom::PIDReceiverPtr pid_receiver; |
| 436 service_manager::Identity identity(mojom::kBrowserServiceName, new_id); | 442 service_manager::Identity identity(mojom::kBrowserServiceName, new_id); |
| 437 service_manager_connection->GetConnector()->StartService( | 443 service_manager_connection->GetConnector()->StartService( |
| 438 identity, std::move(service), mojo::MakeRequest(&pid_receiver)); | 444 identity, std::move(service), mojo::MakeRequest(&pid_receiver)); |
| 439 pid_receiver->SetPID(base::GetCurrentProcId()); | 445 pid_receiver->SetPID(base::GetCurrentProcId()); |
| 440 | 446 |
| 441 service_manager_connection->GetConnector()->StartService(identity); | 447 service_manager_connection->GetConnector()->StartService(identity); |
| 442 BrowserContextServiceManagerConnectionHolder* connection_holder = | 448 BrowserContextServiceManagerConnectionHolder* connection_holder = |
| 443 new BrowserContextServiceManagerConnectionHolder( | 449 new BrowserContextServiceManagerConnectionHolder( |
| 444 std::move(service_request)); | 450 std::move(service_request)); |
| 445 browser_context->SetUserData(kServiceManagerConnection, connection_holder); | 451 browser_context->SetUserData(kServiceManagerConnection, |
| 452 base::WrapUnique(connection_holder)); |
| 446 | 453 |
| 447 ServiceManagerConnection* connection = | 454 ServiceManagerConnection* connection = |
| 448 connection_holder->service_manager_connection(); | 455 connection_holder->service_manager_connection(); |
| 449 | 456 |
| 450 // New embedded service factories should be added to |connection| here. | 457 // New embedded service factories should be added to |connection| here. |
| 451 | 458 |
| 452 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 459 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 453 switches::kMojoLocalStorage)) { | 460 switches::kMojoLocalStorage)) { |
| 454 ServiceInfo info; | 461 ServiceInfo info; |
| 455 info.factory = | 462 info.factory = |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 if (GetUserData(kDownloadManagerKeyName)) | 525 if (GetUserData(kDownloadManagerKeyName)) |
| 519 GetDownloadManager(this)->Shutdown(); | 526 GetDownloadManager(this)->Shutdown(); |
| 520 } | 527 } |
| 521 | 528 |
| 522 void BrowserContext::ShutdownStoragePartitions() { | 529 void BrowserContext::ShutdownStoragePartitions() { |
| 523 if (GetUserData(kStoragePartitionMapKeyName)) | 530 if (GetUserData(kStoragePartitionMapKeyName)) |
| 524 RemoveUserData(kStoragePartitionMapKeyName); | 531 RemoveUserData(kStoragePartitionMapKeyName); |
| 525 } | 532 } |
| 526 | 533 |
| 527 } // namespace content | 534 } // namespace content |
| OLD | NEW |