| 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/base64.h" | 16 #include "base/base64.h" |
| 16 #include "base/command_line.h" | 17 #include "base/command_line.h" |
| 17 #include "base/guid.h" | 18 #include "base/guid.h" |
| 18 #include "base/lazy_instance.h" | 19 #include "base/lazy_instance.h" |
| 19 #include "base/logging.h" | 20 #include "base/logging.h" |
| 20 #include "base/macros.h" | 21 #include "base/macros.h" |
| 22 #include "base/memory/ptr_util.h" |
| 21 #include "base/rand_util.h" | 23 #include "base/rand_util.h" |
| 22 #include "base/threading/thread_task_runner_handle.h" | 24 #include "base/threading/thread_task_runner_handle.h" |
| 23 #include "build/build_config.h" | 25 #include "build/build_config.h" |
| 24 #include "content/browser/blob_storage/chrome_blob_storage_context.h" | 26 #include "content/browser/blob_storage/chrome_blob_storage_context.h" |
| 25 #include "content/browser/download/download_manager_impl.h" | 27 #include "content/browser/download/download_manager_impl.h" |
| 26 #include "content/browser/indexed_db/indexed_db_context_impl.h" | 28 #include "content/browser/indexed_db/indexed_db_context_impl.h" |
| 27 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 29 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 28 #include "content/browser/push_messaging/push_messaging_router.h" | 30 #include "content/browser/push_messaging/push_messaging_router.h" |
| 29 #include "content/browser/storage_partition_impl_map.h" | 31 #include "content/browser/storage_partition_impl_map.h" |
| 30 #include "content/common/child_process_host_impl.h" | 32 #include "content/common/child_process_host_impl.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 g_user_id_to_context.Get().erase(it); | 94 g_user_id_to_context.Get().erase(it); |
| 93 } | 95 } |
| 94 } | 96 } |
| 95 | 97 |
| 96 StoragePartitionImplMap* GetStoragePartitionMap( | 98 StoragePartitionImplMap* GetStoragePartitionMap( |
| 97 BrowserContext* browser_context) { | 99 BrowserContext* browser_context) { |
| 98 StoragePartitionImplMap* partition_map = | 100 StoragePartitionImplMap* partition_map = |
| 99 static_cast<StoragePartitionImplMap*>( | 101 static_cast<StoragePartitionImplMap*>( |
| 100 browser_context->GetUserData(kStoragePartitionMapKeyName)); | 102 browser_context->GetUserData(kStoragePartitionMapKeyName)); |
| 101 if (!partition_map) { | 103 if (!partition_map) { |
| 102 partition_map = new StoragePartitionImplMap(browser_context); | 104 auto partition_map_owned = |
| 103 browser_context->SetUserData(kStoragePartitionMapKeyName, partition_map); | 105 base::MakeUnique<StoragePartitionImplMap>(browser_context); |
| 106 partition_map = partition_map_owned.get(); |
| 107 browser_context->SetUserData(kStoragePartitionMapKeyName, |
| 108 std::move(partition_map_owned)); |
| 104 } | 109 } |
| 105 return partition_map; | 110 return partition_map; |
| 106 } | 111 } |
| 107 | 112 |
| 108 StoragePartition* GetStoragePartitionFromConfig( | 113 StoragePartition* GetStoragePartitionFromConfig( |
| 109 BrowserContext* browser_context, | 114 BrowserContext* browser_context, |
| 110 const std::string& partition_domain, | 115 const std::string& partition_domain, |
| 111 const std::string& partition_name, | 116 const std::string& partition_name, |
| 112 bool in_memory) { | 117 bool in_memory) { |
| 113 StoragePartitionImplMap* partition_map = | 118 StoragePartitionImplMap* partition_map = |
| (...skipping 20 matching lines...) Expand all Loading... |
| 134 indexed_db_context->SetForceKeepSessionState(); | 139 indexed_db_context->SetForceKeepSessionState(); |
| 135 } | 140 } |
| 136 | 141 |
| 137 void ShutdownServiceWorkerContext(StoragePartition* partition) { | 142 void ShutdownServiceWorkerContext(StoragePartition* partition) { |
| 138 ServiceWorkerContextWrapper* wrapper = | 143 ServiceWorkerContextWrapper* wrapper = |
| 139 static_cast<ServiceWorkerContextWrapper*>( | 144 static_cast<ServiceWorkerContextWrapper*>( |
| 140 partition->GetServiceWorkerContext()); | 145 partition->GetServiceWorkerContext()); |
| 141 wrapper->process_manager()->Shutdown(); | 146 wrapper->process_manager()->Shutdown(); |
| 142 } | 147 } |
| 143 | 148 |
| 144 void SetDownloadManager(BrowserContext* context, | 149 void SetDownloadManager( |
| 145 content::DownloadManager* download_manager) { | 150 BrowserContext* context, |
| 151 std::unique_ptr<content::DownloadManager> download_manager) { |
| 146 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 152 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 147 DCHECK(download_manager); | 153 DCHECK(download_manager); |
| 148 context->SetUserData(kDownloadManagerKeyName, download_manager); | 154 context->SetUserData(kDownloadManagerKeyName, std::move(download_manager)); |
| 149 } | 155 } |
| 150 | 156 |
| 151 class BrowserContextServiceManagerConnectionHolder | 157 class BrowserContextServiceManagerConnectionHolder |
| 152 : public base::SupportsUserData::Data { | 158 : public base::SupportsUserData::Data { |
| 153 public: | 159 public: |
| 154 explicit BrowserContextServiceManagerConnectionHolder( | 160 explicit BrowserContextServiceManagerConnectionHolder( |
| 155 service_manager::mojom::ServiceRequest request) | 161 service_manager::mojom::ServiceRequest request) |
| 156 : service_manager_connection_(ServiceManagerConnection::Create( | 162 : service_manager_connection_(ServiceManagerConnection::Create( |
| 157 std::move(request), | 163 std::move(request), |
| 158 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))) {} | 164 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))) {} |
| (...skipping 30 matching lines...) Expand all Loading... |
| 189 } | 195 } |
| 190 | 196 |
| 191 DownloadManager* BrowserContext::GetDownloadManager( | 197 DownloadManager* BrowserContext::GetDownloadManager( |
| 192 BrowserContext* context) { | 198 BrowserContext* context) { |
| 193 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 199 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 194 if (!context->GetUserData(kDownloadManagerKeyName)) { | 200 if (!context->GetUserData(kDownloadManagerKeyName)) { |
| 195 DownloadManager* download_manager = | 201 DownloadManager* download_manager = |
| 196 new DownloadManagerImpl( | 202 new DownloadManagerImpl( |
| 197 GetContentClient()->browser()->GetNetLog(), context); | 203 GetContentClient()->browser()->GetNetLog(), context); |
| 198 | 204 |
| 199 SetDownloadManager(context, download_manager); | 205 SetDownloadManager(context, base::WrapUnique(download_manager)); |
| 200 download_manager->SetDelegate(context->GetDownloadManagerDelegate()); | 206 download_manager->SetDelegate(context->GetDownloadManagerDelegate()); |
| 201 } | 207 } |
| 202 | 208 |
| 203 return static_cast<DownloadManager*>( | 209 return static_cast<DownloadManager*>( |
| 204 context->GetUserData(kDownloadManagerKeyName)); | 210 context->GetUserData(kDownloadManagerKeyName)); |
| 205 } | 211 } |
| 206 | 212 |
| 207 // static | 213 // static |
| 208 storage::ExternalMountPoints* BrowserContext::GetMountPoints( | 214 storage::ExternalMountPoints* BrowserContext::GetMountPoints( |
| 209 BrowserContext* context) { | 215 BrowserContext* context) { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 if (indexed_db_context_impl->TaskRunner()) { | 393 if (indexed_db_context_impl->TaskRunner()) { |
| 388 indexed_db_context_impl->TaskRunner()->PostTask( | 394 indexed_db_context_impl->TaskRunner()->PostTask( |
| 389 FROM_HERE, | 395 FROM_HERE, |
| 390 base::Bind(&SaveSessionStateOnIndexedDBThread, | 396 base::Bind(&SaveSessionStateOnIndexedDBThread, |
| 391 make_scoped_refptr(indexed_db_context_impl))); | 397 make_scoped_refptr(indexed_db_context_impl))); |
| 392 } | 398 } |
| 393 } | 399 } |
| 394 | 400 |
| 395 void BrowserContext::SetDownloadManagerForTesting( | 401 void BrowserContext::SetDownloadManagerForTesting( |
| 396 BrowserContext* browser_context, | 402 BrowserContext* browser_context, |
| 397 DownloadManager* download_manager) { | 403 std::unique_ptr<content::DownloadManager> download_manager) { |
| 398 SetDownloadManager(browser_context, download_manager); | 404 SetDownloadManager(browser_context, std::move(download_manager)); |
| 399 } | 405 } |
| 400 | 406 |
| 401 // static | 407 // static |
| 402 void BrowserContext::Initialize( | 408 void BrowserContext::Initialize( |
| 403 BrowserContext* browser_context, | 409 BrowserContext* browser_context, |
| 404 const base::FilePath& path) { | 410 const base::FilePath& path) { |
| 405 | 411 |
| 406 std::string new_id; | 412 std::string new_id; |
| 407 if (GetContentClient() && GetContentClient()->browser()) { | 413 if (GetContentClient() && GetContentClient()->browser()) { |
| 408 new_id = GetContentClient()->browser()->GetServiceUserIdForBrowserContext( | 414 new_id = GetContentClient()->browser()->GetServiceUserIdForBrowserContext( |
| 409 browser_context); | 415 browser_context); |
| 410 } else { | 416 } else { |
| 411 // Some test scenarios initialize a BrowserContext without a content client. | 417 // Some test scenarios initialize a BrowserContext without a content client. |
| 412 new_id = base::GenerateGUID(); | 418 new_id = base::GenerateGUID(); |
| 413 } | 419 } |
| 414 | 420 |
| 415 ServiceUserIdHolder* holder = static_cast<ServiceUserIdHolder*>( | 421 ServiceUserIdHolder* holder = static_cast<ServiceUserIdHolder*>( |
| 416 browser_context->GetUserData(kServiceUserId)); | 422 browser_context->GetUserData(kServiceUserId)); |
| 417 if (holder) | 423 if (holder) |
| 418 file::ForgetServiceUserIdUserDirAssociation(holder->user_id()); | 424 file::ForgetServiceUserIdUserDirAssociation(holder->user_id()); |
| 419 file::AssociateServiceUserIdWithUserDir(new_id, path); | 425 file::AssociateServiceUserIdWithUserDir(new_id, path); |
| 420 RemoveBrowserContextFromUserIdMap(browser_context); | 426 RemoveBrowserContextFromUserIdMap(browser_context); |
| 421 g_user_id_to_context.Get()[new_id] = browser_context; | 427 g_user_id_to_context.Get()[new_id] = browser_context; |
| 422 browser_context->SetUserData(kServiceUserId, | 428 browser_context->SetUserData(kServiceUserId, |
| 423 new ServiceUserIdHolder(new_id)); | 429 base::MakeUnique<ServiceUserIdHolder>(new_id)); |
| 424 | 430 |
| 425 browser_context->SetUserData(kMojoWasInitialized, | 431 browser_context->SetUserData( |
| 426 new base::SupportsUserData::Data); | 432 kMojoWasInitialized, base::MakeUnique<base::SupportsUserData::Data>()); |
| 427 | 433 |
| 428 ServiceManagerConnection* service_manager_connection = | 434 ServiceManagerConnection* service_manager_connection = |
| 429 ServiceManagerConnection::GetForProcess(); | 435 ServiceManagerConnection::GetForProcess(); |
| 430 if (service_manager_connection && base::ThreadTaskRunnerHandle::IsSet()) { | 436 if (service_manager_connection && base::ThreadTaskRunnerHandle::IsSet()) { |
| 431 // NOTE: Many unit tests create a TestBrowserContext without initializing | 437 // NOTE: Many unit tests create a TestBrowserContext without initializing |
| 432 // Mojo or the global service manager connection. | 438 // Mojo or the global service manager connection. |
| 433 | 439 |
| 434 service_manager::mojom::ServicePtr service; | 440 service_manager::mojom::ServicePtr service; |
| 435 service_manager::mojom::ServiceRequest service_request(&service); | 441 service_manager::mojom::ServiceRequest service_request(&service); |
| 436 | 442 |
| 437 service_manager::mojom::PIDReceiverPtr pid_receiver; | 443 service_manager::mojom::PIDReceiverPtr pid_receiver; |
| 438 service_manager::Identity identity(mojom::kBrowserServiceName, new_id); | 444 service_manager::Identity identity(mojom::kBrowserServiceName, new_id); |
| 439 service_manager_connection->GetConnector()->StartService( | 445 service_manager_connection->GetConnector()->StartService( |
| 440 identity, std::move(service), mojo::MakeRequest(&pid_receiver)); | 446 identity, std::move(service), mojo::MakeRequest(&pid_receiver)); |
| 441 pid_receiver->SetPID(base::GetCurrentProcId()); | 447 pid_receiver->SetPID(base::GetCurrentProcId()); |
| 442 | 448 |
| 443 service_manager_connection->GetConnector()->StartService(identity); | 449 service_manager_connection->GetConnector()->StartService(identity); |
| 444 BrowserContextServiceManagerConnectionHolder* connection_holder = | 450 BrowserContextServiceManagerConnectionHolder* connection_holder = |
| 445 new BrowserContextServiceManagerConnectionHolder( | 451 new BrowserContextServiceManagerConnectionHolder( |
| 446 std::move(service_request)); | 452 std::move(service_request)); |
| 447 browser_context->SetUserData(kServiceManagerConnection, connection_holder); | 453 browser_context->SetUserData(kServiceManagerConnection, |
| 454 base::WrapUnique(connection_holder)); |
| 448 | 455 |
| 449 ServiceManagerConnection* connection = | 456 ServiceManagerConnection* connection = |
| 450 connection_holder->service_manager_connection(); | 457 connection_holder->service_manager_connection(); |
| 451 | 458 |
| 452 // New embedded service factories should be added to |connection| here. | 459 // New embedded service factories should be added to |connection| here. |
| 453 | 460 |
| 454 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 461 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 455 switches::kMojoLocalStorage)) { | 462 switches::kMojoLocalStorage)) { |
| 456 ServiceInfo info; | 463 ServiceInfo info; |
| 457 info.factory = | 464 info.factory = |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 | 542 |
| 536 // static | 543 // static |
| 537 std::string BrowserContext::CreateRandomMediaDeviceIDSalt() { | 544 std::string BrowserContext::CreateRandomMediaDeviceIDSalt() { |
| 538 std::string salt; | 545 std::string salt; |
| 539 base::Base64Encode(base::RandBytesAsString(16), &salt); | 546 base::Base64Encode(base::RandBytesAsString(16), &salt); |
| 540 DCHECK(!salt.empty()); | 547 DCHECK(!salt.empty()); |
| 541 return salt; | 548 return salt; |
| 542 } | 549 } |
| 543 | 550 |
| 544 } // namespace content | 551 } // namespace content |
| OLD | NEW |