| 
									
										
										
										
											2014-10-31 11:17:05 -07:00
										 |  |  | // Copyright (c) 2013 GitHub, Inc.
 | 
					
						
							| 
									
										
										
										
											2014-04-25 17:49:37 +08:00
										 |  |  | // Use of this source code is governed by the MIT license that can be
 | 
					
						
							| 
									
										
										
										
											2013-04-16 00:25:08 +08:00
										 |  |  | // found in the LICENSE file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-16 08:30:26 +08:00
										 |  |  | #include "atom/browser/atom_browser_context.h"
 | 
					
						
							| 
									
										
										
										
											2013-04-16 00:25:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | #include <utility>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-31 05:38:32 +05:30
										 |  |  | #include "atom/browser/atom_blob_reader.h"
 | 
					
						
							| 
									
										
										
										
											2019-05-01 16:34:42 -07:00
										 |  |  | #include "atom/browser/atom_browser_client.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-13 16:16:04 -07:00
										 |  |  | #include "atom/browser/atom_browser_main_parts.h"
 | 
					
						
							| 
									
										
										
										
											2015-06-22 17:13:49 +05:30
										 |  |  | #include "atom/browser/atom_download_manager_delegate.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-24 12:49:10 +02:00
										 |  |  | #include "atom/browser/atom_paths.h"
 | 
					
						
							| 
									
										
										
										
											2016-08-26 15:30:02 -07:00
										 |  |  | #include "atom/browser/atom_permission_manager.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | #include "atom/browser/cookie_change_notifier.h"
 | 
					
						
							|  |  |  | #include "atom/browser/net/resolve_proxy_helper.h"
 | 
					
						
							|  |  |  | #include "atom/browser/pref_store_delegate.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-21 17:51:04 +02:00
										 |  |  | #include "atom/browser/special_storage_policy.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-19 15:50:30 +02:00
										 |  |  | #include "atom/browser/ui/inspectable_web_contents_impl.h"
 | 
					
						
							| 
									
										
										
										
											2015-02-04 15:17:28 -08:00
										 |  |  | #include "atom/browser/web_view_manager.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-19 20:51:43 +02:00
										 |  |  | #include "atom/browser/zoom_level_delegate.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-24 12:49:10 +02:00
										 |  |  | #include "atom/common/application_info.h"
 | 
					
						
							| 
									
										
										
										
											2018-08-13 16:16:04 -07:00
										 |  |  | #include "atom/common/options_switches.h"
 | 
					
						
							| 
									
										
										
										
											2015-01-05 13:40:38 -08:00
										 |  |  | #include "base/command_line.h"
 | 
					
						
							| 
									
										
										
										
											2015-07-26 16:17:55 +08:00
										 |  |  | #include "base/files/file_path.h"
 | 
					
						
							| 
									
										
										
										
											2016-01-21 13:51:37 +05:30
										 |  |  | #include "base/path_service.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | #include "base/strings/string_util.h"
 | 
					
						
							|  |  |  | #include "base/threading/sequenced_task_runner_handle.h"
 | 
					
						
							|  |  |  | #include "base/threading/thread_restrictions.h"
 | 
					
						
							| 
									
										
										
										
											2016-01-21 13:51:37 +05:30
										 |  |  | #include "chrome/common/chrome_paths.h"
 | 
					
						
							| 
									
										
										
										
											2015-07-26 16:17:55 +08:00
										 |  |  | #include "chrome/common/pref_names.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-11 15:52:12 +02:00
										 |  |  | #include "components/keyed_service/content/browser_context_dependency_manager.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | #include "components/prefs/json_pref_store.h"
 | 
					
						
							| 
									
										
										
										
											2016-06-15 20:31:29 +09:00
										 |  |  | #include "components/prefs/pref_registry_simple.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | #include "components/prefs/pref_service.h"
 | 
					
						
							|  |  |  | #include "components/prefs/pref_service_factory.h"
 | 
					
						
							|  |  |  | #include "components/prefs/value_map_pref_store.h"
 | 
					
						
							|  |  |  | #include "components/proxy_config/pref_proxy_config_tracker_impl.h"
 | 
					
						
							|  |  |  | #include "components/proxy_config/proxy_config_pref_names.h"
 | 
					
						
							| 
									
										
										
										
											2019-03-05 10:38:55 +05:30
										 |  |  | #include "content/browser/blob_storage/chrome_blob_storage_context.h"  // nogncheck
 | 
					
						
							| 
									
										
										
										
											2019-01-23 01:20:25 +05:30
										 |  |  | #include "content/public/browser/browser_thread.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | #include "content/public/browser/storage_partition.h"
 | 
					
						
							|  |  |  | #include "net/base/escape.h"
 | 
					
						
							| 
									
										
										
										
											2019-03-26 06:40:48 +05:30
										 |  |  | #include "services/network/public/cpp/features.h"
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | using content::BrowserThread; | 
					
						
							| 
									
										
										
										
											2013-09-20 16:47:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-13 17:40:31 +08:00
										 |  |  | namespace atom { | 
					
						
							| 
									
										
										
										
											2013-09-20 16:47:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-23 12:13:46 +08:00
										 |  |  | namespace { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | // Convert string to lower case and escape it.
 | 
					
						
							|  |  |  | std::string MakePartitionName(const std::string& input) { | 
					
						
							|  |  |  |   return net::EscapePath(base::ToLowerASCII(input)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-23 12:13:46 +08:00
										 |  |  | }  // namespace
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | // static
 | 
					
						
							|  |  |  | AtomBrowserContext::BrowserContextMap AtomBrowserContext::browser_context_map_; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-17 16:03:24 +05:30
										 |  |  | AtomBrowserContext::AtomBrowserContext(const std::string& partition, | 
					
						
							|  |  |  |                                        bool in_memory, | 
					
						
							|  |  |  |                                        const base::DictionaryValue& options) | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |     : base::RefCountedDeleteOnSequence<AtomBrowserContext>( | 
					
						
							| 
									
										
										
										
											2018-10-09 02:59:58 +05:30
										 |  |  |           base::ThreadTaskRunnerHandle::Get()), | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |       in_memory_pref_store_(nullptr), | 
					
						
							|  |  |  |       storage_policy_(new SpecialStoragePolicy), | 
					
						
							|  |  |  |       in_memory_(in_memory), | 
					
						
							|  |  |  |       weak_factory_(this) { | 
					
						
							| 
									
										
										
										
											2019-05-01 16:34:42 -07:00
										 |  |  |   user_agent_ = AtomBrowserClient::Get()->GetUserAgent(); | 
					
						
							| 
									
										
										
										
											2016-07-12 22:05:07 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Read options.
 | 
					
						
							| 
									
										
										
										
											2018-08-15 02:37:53 +05:30
										 |  |  |   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   use_cache_ = !command_line->HasSwitch(switches::kDisableHttpCache); | 
					
						
							|  |  |  |   options.GetBoolean("cache", &use_cache_); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   base::StringToInt(command_line->GetSwitchValueASCII(switches::kDiskCacheSize), | 
					
						
							|  |  |  |                     &max_cache_size_); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 12:49:10 +02:00
										 |  |  |   if (!base::PathService::Get(DIR_USER_DATA, &path_)) { | 
					
						
							|  |  |  |     base::PathService::Get(DIR_APP_DATA, &path_); | 
					
						
							|  |  |  |     path_ = path_.Append(base::FilePath::FromUTF8Unsafe(GetApplicationName())); | 
					
						
							|  |  |  |     base::PathService::Override(DIR_USER_DATA, path_); | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-08-15 02:37:53 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   if (!in_memory && !partition.empty()) | 
					
						
							|  |  |  |     path_ = path_.Append(FILE_PATH_LITERAL("Partitions")) | 
					
						
							|  |  |  |                 .Append(base::FilePath::FromUTF8Unsafe( | 
					
						
							|  |  |  |                     MakePartitionName(partition))); | 
					
						
							| 
									
										
										
										
											2016-07-26 16:34:04 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   content::BrowserContext::Initialize(this, path_); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Initialize Pref Registry.
 | 
					
						
							| 
									
										
										
										
											2016-07-26 16:34:04 +05:30
										 |  |  |   InitPrefs(); | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-26 06:40:48 +05:30
										 |  |  |   if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { | 
					
						
							|  |  |  |     proxy_config_monitor_ = std::make_unique<ProxyConfigMonitor>(prefs_.get()); | 
					
						
							|  |  |  |     io_handle_ = | 
					
						
							|  |  |  |         new URLRequestContextGetter::Handle(weak_factory_.GetWeakPtr()); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   cookie_change_notifier_ = std::make_unique<CookieChangeNotifier>(this); | 
					
						
							| 
									
										
										
										
											2018-10-11 15:52:12 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   BrowserContextDependencyManager::GetInstance()->MarkBrowserContextLive(this); | 
					
						
							| 
									
										
										
										
											2016-06-22 15:46:46 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-15 02:37:53 +05:30
										 |  |  | AtomBrowserContext::~AtomBrowserContext() { | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
					
						
							|  |  |  |   NotifyWillBeDestroyed(this); | 
					
						
							|  |  |  |   ShutdownStoragePartitions(); | 
					
						
							| 
									
										
										
										
											2019-03-26 06:40:48 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |   BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, | 
					
						
							|  |  |  |                             std::move(resource_context_)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) | 
					
						
							|  |  |  |     io_handle_->ShutdownOnUIThread(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-11 15:52:12 +02:00
										 |  |  |   // Notify any keyed services of browser context destruction.
 | 
					
						
							|  |  |  |   BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( | 
					
						
							|  |  |  |       this); | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void AtomBrowserContext::InitPrefs() { | 
					
						
							|  |  |  |   auto prefs_path = GetPath().Append(FILE_PATH_LITERAL("Preferences")); | 
					
						
							|  |  |  |   base::ThreadRestrictions::ScopedAllowIO allow_io; | 
					
						
							|  |  |  |   PrefServiceFactory prefs_factory; | 
					
						
							|  |  |  |   scoped_refptr<JsonPrefStore> pref_store = | 
					
						
							|  |  |  |       base::MakeRefCounted<JsonPrefStore>(prefs_path); | 
					
						
							|  |  |  |   pref_store->ReadPrefs();  // Synchronous.
 | 
					
						
							|  |  |  |   prefs_factory.set_user_prefs(pref_store); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   auto registry = WrapRefCounted(new PrefRegistrySimple); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   registry->RegisterFilePathPref(prefs::kSelectFileLastDirectory, | 
					
						
							|  |  |  |                                  base::FilePath()); | 
					
						
							|  |  |  |   base::FilePath download_dir; | 
					
						
							|  |  |  |   base::PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, &download_dir); | 
					
						
							|  |  |  |   registry->RegisterFilePathPref(prefs::kDownloadDefaultDirectory, | 
					
						
							|  |  |  |                                  download_dir); | 
					
						
							|  |  |  |   registry->RegisterDictionaryPref(prefs::kDevToolsFileSystemPaths); | 
					
						
							| 
									
										
										
										
											2018-10-19 15:50:30 +02:00
										 |  |  |   InspectableWebContentsImpl::RegisterPrefs(registry.get()); | 
					
						
							| 
									
										
										
										
											2018-10-19 20:51:43 +02:00
										 |  |  |   MediaDeviceIDSalt::RegisterPrefs(registry.get()); | 
					
						
							|  |  |  |   ZoomLevelDelegate::RegisterPrefs(registry.get()); | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   PrefProxyConfigTrackerImpl::RegisterPrefs(registry.get()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   prefs_ = prefs_factory.Create( | 
					
						
							|  |  |  |       registry.get(), | 
					
						
							|  |  |  |       std::make_unique<PrefStoreDelegate>(weak_factory_.GetWeakPtr())); | 
					
						
							|  |  |  |   prefs_->UpdateCommandLinePrefStore(new ValueMapPrefStore); | 
					
						
							| 
									
										
										
										
											2018-08-15 02:37:53 +05:30
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-06-22 15:46:46 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-22 15:57:51 +09:00
										 |  |  | void AtomBrowserContext::SetUserAgent(const std::string& user_agent) { | 
					
						
							|  |  |  |   user_agent_ = user_agent; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | net::URLRequestContextGetter* AtomBrowserContext::CreateRequestContext( | 
					
						
							|  |  |  |     content::ProtocolHandlerMap* protocol_handlers, | 
					
						
							|  |  |  |     content::URLRequestInterceptorScopedVector protocol_interceptors) { | 
					
						
							| 
									
										
										
										
											2019-03-26 06:40:48 +05:30
										 |  |  |   if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { | 
					
						
							|  |  |  |     return io_handle_ | 
					
						
							|  |  |  |         ->CreateMainRequestContextGetter(protocol_handlers, | 
					
						
							|  |  |  |                                          std::move(protocol_interceptors)) | 
					
						
							|  |  |  |         .get(); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     NOTREACHED(); | 
					
						
							|  |  |  |     return nullptr; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | net::URLRequestContextGetter* AtomBrowserContext::CreateMediaRequestContext() { | 
					
						
							| 
									
										
										
										
											2019-03-26 06:40:48 +05:30
										 |  |  |   if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { | 
					
						
							|  |  |  |     return io_handle_->GetMainRequestContextGetter().get(); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     NOTREACHED(); | 
					
						
							|  |  |  |     return nullptr; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | net::URLRequestContextGetter* AtomBrowserContext::GetRequestContext() { | 
					
						
							| 
									
										
										
										
											2019-03-26 06:40:48 +05:30
										 |  |  |   if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { | 
					
						
							|  |  |  |     return GetDefaultStoragePartition(this)->GetURLRequestContext(); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     NOTREACHED(); | 
					
						
							|  |  |  |     return nullptr; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | network::mojom::NetworkContextPtr AtomBrowserContext::GetNetworkContext() { | 
					
						
							| 
									
										
										
										
											2019-03-26 06:40:48 +05:30
										 |  |  |   if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { | 
					
						
							|  |  |  |     return io_handle_->GetNetworkContext(); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     NOTREACHED(); | 
					
						
							|  |  |  |     return nullptr; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | base::FilePath AtomBrowserContext::GetPath() const { | 
					
						
							|  |  |  |   return path_; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool AtomBrowserContext::IsOffTheRecord() const { | 
					
						
							|  |  |  |   return in_memory_; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool AtomBrowserContext::CanUseHttpCache() const { | 
					
						
							|  |  |  |   return use_cache_; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int AtomBrowserContext::GetMaxCacheSize() const { | 
					
						
							|  |  |  |   return max_cache_size_; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | content::ResourceContext* AtomBrowserContext::GetResourceContext() { | 
					
						
							| 
									
										
										
										
											2019-03-26 06:40:48 +05:30
										 |  |  |   if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { | 
					
						
							|  |  |  |     return io_handle_->GetResourceContext(); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     if (!resource_context_) | 
					
						
							|  |  |  |       resource_context_.reset(new content::ResourceContext); | 
					
						
							|  |  |  |     return resource_context_.get(); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | std::string AtomBrowserContext::GetMediaDeviceIDSalt() { | 
					
						
							|  |  |  |   if (!media_device_id_salt_.get()) | 
					
						
							| 
									
										
										
										
											2018-10-19 20:51:43 +02:00
										 |  |  |     media_device_id_salt_.reset(new MediaDeviceIDSalt(prefs_.get())); | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   return media_device_id_salt_->GetSalt(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | std::unique_ptr<content::ZoomLevelDelegate> | 
					
						
							|  |  |  | AtomBrowserContext::CreateZoomLevelDelegate( | 
					
						
							|  |  |  |     const base::FilePath& partition_path) { | 
					
						
							|  |  |  |   if (!IsOffTheRecord()) { | 
					
						
							| 
									
										
										
										
											2018-10-19 20:51:43 +02:00
										 |  |  |     return std::make_unique<ZoomLevelDelegate>(prefs(), partition_path); | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   } | 
					
						
							|  |  |  |   return std::unique_ptr<content::ZoomLevelDelegate>(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-22 17:13:49 +05:30
										 |  |  | content::DownloadManagerDelegate* | 
					
						
							|  |  |  | AtomBrowserContext::GetDownloadManagerDelegate() { | 
					
						
							|  |  |  |   if (!download_manager_delegate_.get()) { | 
					
						
							| 
									
										
										
										
											2018-04-17 15:41:47 -07:00
										 |  |  |     auto* download_manager = content::BrowserContext::GetDownloadManager(this); | 
					
						
							| 
									
										
										
										
											2015-06-22 17:13:49 +05:30
										 |  |  |     download_manager_delegate_.reset( | 
					
						
							|  |  |  |         new AtomDownloadManagerDelegate(download_manager)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return download_manager_delegate_.get(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-22 22:55:13 +08:00
										 |  |  | content::BrowserPluginGuestManager* AtomBrowserContext::GetGuestManager() { | 
					
						
							|  |  |  |   if (!guest_manager_) | 
					
						
							| 
									
										
										
										
											2015-09-05 11:43:30 +09:00
										 |  |  |     guest_manager_.reset(new WebViewManager); | 
					
						
							| 
									
										
										
										
											2014-10-22 22:55:13 +08:00
										 |  |  |   return guest_manager_.get(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-02 14:53:10 -07:00
										 |  |  | content::PermissionControllerDelegate* | 
					
						
							|  |  |  | AtomBrowserContext::GetPermissionControllerDelegate() { | 
					
						
							| 
									
										
										
										
											2016-02-01 00:43:29 +05:30
										 |  |  |   if (!permission_manager_.get()) | 
					
						
							|  |  |  |     permission_manager_.reset(new AtomPermissionManager); | 
					
						
							| 
									
										
										
										
											2016-01-30 16:49:18 +05:30
										 |  |  |   return permission_manager_.get(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-21 17:51:04 +02:00
										 |  |  | storage::SpecialStoragePolicy* AtomBrowserContext::GetSpecialStoragePolicy() { | 
					
						
							|  |  |  |   return storage_policy_.get(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-15 02:37:53 +05:30
										 |  |  | std::string AtomBrowserContext::GetUserAgent() const { | 
					
						
							|  |  |  |   return user_agent_; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-31 05:38:32 +05:30
										 |  |  | AtomBlobReader* AtomBrowserContext::GetBlobReader() { | 
					
						
							|  |  |  |   if (!blob_reader_.get()) { | 
					
						
							|  |  |  |     content::ChromeBlobStorageContext* blob_context = | 
					
						
							|  |  |  |         content::ChromeBlobStorageContext::GetFor(this); | 
					
						
							| 
									
										
										
										
											2018-04-12 13:36:23 +05:30
										 |  |  |     blob_reader_.reset(new AtomBlobReader(blob_context)); | 
					
						
							| 
									
										
										
										
											2016-08-31 05:38:32 +05:30
										 |  |  |   } | 
					
						
							|  |  |  |   return blob_reader_.get(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | content::PushMessagingService* AtomBrowserContext::GetPushMessagingService() { | 
					
						
							|  |  |  |   return nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | content::SSLHostStateDelegate* AtomBrowserContext::GetSSLHostStateDelegate() { | 
					
						
							|  |  |  |   return nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | content::BackgroundFetchDelegate* | 
					
						
							|  |  |  | AtomBrowserContext::GetBackgroundFetchDelegate() { | 
					
						
							|  |  |  |   return nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | content::BackgroundSyncController* | 
					
						
							|  |  |  | AtomBrowserContext::GetBackgroundSyncController() { | 
					
						
							|  |  |  |   return nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | content::BrowsingDataRemoverDelegate* | 
					
						
							|  |  |  | AtomBrowserContext::GetBrowsingDataRemoverDelegate() { | 
					
						
							|  |  |  |   return nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-23 01:20:25 +05:30
										 |  |  | content::ClientHintsControllerDelegate* | 
					
						
							|  |  |  | AtomBrowserContext::GetClientHintsControllerDelegate() { | 
					
						
							|  |  |  |   return nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  | net::URLRequestContextGetter* | 
					
						
							|  |  |  | AtomBrowserContext::CreateRequestContextForStoragePartition( | 
					
						
							|  |  |  |     const base::FilePath& partition_path, | 
					
						
							|  |  |  |     bool in_memory, | 
					
						
							|  |  |  |     content::ProtocolHandlerMap* protocol_handlers, | 
					
						
							|  |  |  |     content::URLRequestInterceptorScopedVector request_interceptors) { | 
					
						
							|  |  |  |   NOTREACHED(); | 
					
						
							|  |  |  |   return nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | net::URLRequestContextGetter* | 
					
						
							|  |  |  | AtomBrowserContext::CreateMediaRequestContextForStoragePartition( | 
					
						
							|  |  |  |     const base::FilePath& partition_path, | 
					
						
							|  |  |  |     bool in_memory) { | 
					
						
							|  |  |  |   NOTREACHED(); | 
					
						
							|  |  |  |   return nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ResolveProxyHelper* AtomBrowserContext::GetResolveProxyHelper() { | 
					
						
							|  |  |  |   if (!resolve_proxy_helper_) { | 
					
						
							|  |  |  |     resolve_proxy_helper_ = base::MakeRefCounted<ResolveProxyHelper>(this); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return resolve_proxy_helper_.get(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-05 20:54:36 +08:00
										 |  |  | // static
 | 
					
						
							| 
									
										
										
										
											2016-07-12 21:39:54 +09:00
										 |  |  | scoped_refptr<AtomBrowserContext> AtomBrowserContext::From( | 
					
						
							| 
									
										
										
										
											2018-04-17 21:55:30 -04:00
										 |  |  |     const std::string& partition, | 
					
						
							|  |  |  |     bool in_memory, | 
					
						
							| 
									
										
										
										
											2016-07-12 21:53:19 +09:00
										 |  |  |     const base::DictionaryValue& options) { | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   PartitionKey key(partition, in_memory); | 
					
						
							|  |  |  |   auto* browser_context = browser_context_map_[key].get(); | 
					
						
							| 
									
										
										
										
											2016-07-12 21:39:54 +09:00
										 |  |  |   if (browser_context) | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |     return scoped_refptr<AtomBrowserContext>(browser_context); | 
					
						
							| 
									
										
										
										
											2016-07-12 21:39:54 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-04 23:38:56 +05:30
										 |  |  |   auto* new_context = new AtomBrowserContext(partition, in_memory, options); | 
					
						
							|  |  |  |   browser_context_map_[key] = new_context->GetWeakPtr(); | 
					
						
							|  |  |  |   return scoped_refptr<AtomBrowserContext>(new_context); | 
					
						
							| 
									
										
										
										
											2015-09-05 20:54:36 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 21:39:54 +09:00
										 |  |  | }  // namespace atom
 |