blob: b81ae1c6b1537ff35c794338679faa5ac6e81f05 [file] [log] [blame]
[email protected]de7d61ff2013-08-20 11:30:411// Copyright 2013 The Chromium Authors. All rights reserved.
[email protected]b0f146f2011-09-15 22:14:252// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]de7d61ff2013-08-20 11:30:415#include "content/shell/browser/shell_browser_context.h"
[email protected]b0f146f2011-09-15 22:14:256
[email protected]037edb52011-11-15 21:14:067#include "base/bind.h"
[email protected]2f2b9512012-06-08 17:31:008#include "base/command_line.h"
[email protected]5cba3bf2012-01-14 02:40:359#include "base/environment.h"
thestigb7aad54f2014-09-05 18:25:3910#include "base/files/file_util.h"
[email protected]b0f146f2011-09-15 22:14:2511#include "base/logging.h"
12#include "base/path_service.h"
[email protected]2e5b60a22011-11-28 15:56:4113#include "base/threading/thread.h"
[email protected]c38831a12011-10-28 12:44:4914#include "content/public/browser/browser_thread.h"
[email protected]6bd30072013-02-08 18:17:1115#include "content/public/browser/storage_partition.h"
16#include "content/public/common/content_switches.h"
[email protected]de7d61ff2013-08-20 11:30:4117#include "content/shell/browser/shell_download_manager_delegate.h"
mlamouri4e372022015-03-29 14:51:0618#include "content/shell/browser/shell_permission_manager.h"
[email protected]b7c504c2013-05-07 14:42:1219#include "content/shell/common/shell_switches.h"
[email protected]b0f146f2011-09-15 22:14:2520
21#if defined(OS_WIN)
22#include "base/base_paths_win.h"
[email protected]5cba3bf2012-01-14 02:40:3523#elif defined(OS_LINUX)
24#include "base/nix/xdg_util.h"
[email protected]80ec0b72012-03-22 22:45:2725#elif defined(OS_MACOSX)
26#include "base/base_paths_mac.h"
[email protected]b0f146f2011-09-15 22:14:2527#endif
28
[email protected]810ddc52012-01-24 01:00:3529namespace content {
30
hanxi3328d992014-10-09 13:27:1131ShellBrowserContext::ShellResourceContext::ShellResourceContext()
32 : getter_(NULL) {
33}
[email protected]6bd30072013-02-08 18:17:1134
hanxi3328d992014-10-09 13:27:1135ShellBrowserContext::ShellResourceContext::~ShellResourceContext() {
36}
[email protected]6bd30072013-02-08 18:17:1137
hanxi3328d992014-10-09 13:27:1138net::HostResolver*
39ShellBrowserContext::ShellResourceContext::GetHostResolver() {
40 CHECK(getter_);
41 return getter_->host_resolver();
42}
[email protected]6bd30072013-02-08 18:17:1143
hanxi3328d992014-10-09 13:27:1144net::URLRequestContext*
45ShellBrowserContext::ShellResourceContext::GetRequestContext() {
46 CHECK(getter_);
47 return getter_->GetURLRequestContext();
48}
[email protected]6bd30072013-02-08 18:17:1149
[email protected]d5869bf2013-07-03 16:21:4750ShellBrowserContext::ShellBrowserContext(bool off_the_record,
51 net::NetLog* net_log)
hanxi3328d992014-10-09 13:27:1152 : resource_context_(new ShellResourceContext),
mkwstd993d06a2014-10-10 11:44:3853 ignore_certificate_errors_(false),
hanxi3328d992014-10-09 13:27:1154 off_the_record_(off_the_record),
[email protected]d5869bf2013-07-03 16:21:4755 net_log_(net_log),
hanxi3328d992014-10-09 13:27:1156 guest_manager_(NULL) {
[email protected]11a65b692012-03-30 11:29:1657 InitWhileIOAllowed();
[email protected]b0f146f2011-09-15 22:14:2558}
59
60ShellBrowserContext::~ShellBrowserContext() {
[email protected]59383c782013-04-17 16:43:2761 if (resource_context_) {
[email protected]e99ca5112011-09-26 17:22:5462 BrowserThread::DeleteSoon(
63 BrowserThread::IO, FROM_HERE, resource_context_.release());
64 }
[email protected]b0f146f2011-09-15 22:14:2565}
66
[email protected]11a65b692012-03-30 11:29:1667void ShellBrowserContext::InitWhileIOAllowed() {
avi83883c82014-12-23 00:08:4968 base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
mkwstd993d06a2014-10-10 11:44:3869 if (cmd_line->HasSwitch(switches::kIgnoreCertificateErrors))
[email protected]c2dad292012-09-07 21:27:3570 ignore_certificate_errors_ = true;
[email protected]e1cf85a22012-08-17 22:39:2371 if (cmd_line->HasSwitch(switches::kContentShellDataPath)) {
72 path_ = cmd_line->GetSwitchValuePath(switches::kContentShellDataPath);
73 return;
74 }
[email protected]b0f146f2011-09-15 22:14:2575#if defined(OS_WIN)
[email protected]e99ca5112011-09-26 17:22:5476 CHECK(PathService::Get(base::DIR_LOCAL_APP_DATA, &path_));
77 path_ = path_.Append(std::wstring(L"content_shell"));
[email protected]5cba3bf2012-01-14 02:40:3578#elif defined(OS_LINUX)
79 scoped_ptr<base::Environment> env(base::Environment::Create());
[email protected]d30a36f2013-02-07 04:16:2680 base::FilePath config_dir(
[email protected]9528c9a2012-06-13 23:20:2281 base::nix::GetXDGDirectory(env.get(),
82 base::nix::kXdgConfigHomeEnvVar,
83 base::nix::kDotConfigDir));
[email protected]5cba3bf2012-01-14 02:40:3584 path_ = config_dir.Append("content_shell");
[email protected]80ec0b72012-03-22 22:45:2785#elif defined(OS_MACOSX)
86 CHECK(PathService::Get(base::DIR_APP_DATA, &path_));
87 path_ = path_.Append("Chromium Content Shell");
[email protected]70a7f1192012-06-08 01:31:3488#elif defined(OS_ANDROID)
[email protected]c3bf75252013-03-18 22:11:4889 CHECK(PathService::Get(base::DIR_ANDROID_APP_DATA, &path_));
[email protected]70a7f1192012-06-08 01:31:3490 path_ = path_.Append(FILE_PATH_LITERAL("content_shell"));
[email protected]b0f146f2011-09-15 22:14:2591#else
92 NOTIMPLEMENTED();
93#endif
94
[email protected]7567484142013-07-11 17:36:0795 if (!base::PathExists(path_))
[email protected]426d1c92013-12-03 20:08:5496 base::CreateDirectory(path_);
[email protected]11a65b692012-03-30 11:29:1697}
[email protected]b0f146f2011-09-15 22:14:2598
wjmacleancaa7d6d2014-11-12 16:42:1199scoped_ptr<ZoomLevelDelegate> ShellBrowserContext::CreateZoomLevelDelegate(
100 const base::FilePath&) {
101 return scoped_ptr<ZoomLevelDelegate>();
102}
103
[email protected]4251165a2013-07-17 04:33:40104base::FilePath ShellBrowserContext::GetPath() const {
[email protected]e99ca5112011-09-26 17:22:54105 return path_;
[email protected]b0f146f2011-09-15 22:14:25106}
107
[email protected]27d6e852012-03-02 21:31:32108bool ShellBrowserContext::IsOffTheRecord() const {
[email protected]71d504f2012-07-25 17:15:28109 return off_the_record_;
[email protected]b0f146f2011-09-15 22:14:25110}
111
[email protected]b441a8492012-06-06 14:55:57112DownloadManagerDelegate* ShellBrowserContext::GetDownloadManagerDelegate() {
[email protected]fc72bb12013-06-02 21:13:46113 if (!download_manager_delegate_.get()) {
[email protected]7cef82172013-12-17 06:58:37114 download_manager_delegate_.reset(new ShellDownloadManagerDelegate());
mkwstd993d06a2014-10-10 11:44:38115 download_manager_delegate_->SetDownloadManager(
116 BrowserContext::GetDownloadManager(this));
[email protected]59002092012-08-27 19:42:56117 }
[email protected]08c92ac2012-08-21 23:41:40118
[email protected]b441a8492012-06-06 14:55:57119 return download_manager_delegate_.get();
[email protected]b0f146f2011-09-15 22:14:25120}
121
[email protected]b0f146f2011-09-15 22:14:25122net::URLRequestContextGetter* ShellBrowserContext::GetRequestContext() {
[email protected]6bd30072013-02-08 18:17:11123 return GetDefaultStoragePartition(this)->GetURLRequestContext();
124}
125
mkwst94388f792014-10-16 07:36:52126ShellURLRequestContextGetter*
127ShellBrowserContext::CreateURLRequestContextGetter(
[email protected]7571263c2014-03-10 22:57:09128 ProtocolHandlerMap* protocol_handlers,
[email protected]3b90aab2014-05-30 17:56:15129 URLRequestInterceptorScopedVector request_interceptors) {
mkwst94388f792014-10-16 07:36:52130 return new ShellURLRequestContextGetter(
[email protected]6bd30072013-02-08 18:17:11131 ignore_certificate_errors_,
132 GetPath(),
133 BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO),
134 BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE),
[email protected]d5869bf2013-07-03 16:21:47135 protocol_handlers,
[email protected]3b90aab2014-05-30 17:56:15136 request_interceptors.Pass(),
[email protected]d5869bf2013-07-03 16:21:47137 net_log_);
mkwst94388f792014-10-16 07:36:52138}
139
140net::URLRequestContextGetter* ShellBrowserContext::CreateRequestContext(
141 ProtocolHandlerMap* protocol_handlers,
142 URLRequestInterceptorScopedVector request_interceptors) {
143 DCHECK(!url_request_getter_.get());
144 url_request_getter_ = CreateURLRequestContextGetter(
145 protocol_handlers, request_interceptors.Pass());
apavlov297746b2014-10-10 08:25:26146 resource_context_->set_url_request_context_getter(url_request_getter_.get());
[email protected]6bd30072013-02-08 18:17:11147 return url_request_getter_.get();
[email protected]b0f146f2011-09-15 22:14:25148}
149
150net::URLRequestContextGetter*
151 ShellBrowserContext::GetRequestContextForRenderProcess(
152 int renderer_child_id) {
153 return GetRequestContext();
154}
155
156net::URLRequestContextGetter*
[email protected]10705a7b2012-08-21 19:07:08157 ShellBrowserContext::GetMediaRequestContext() {
158 return GetRequestContext();
159}
160
161net::URLRequestContextGetter*
162 ShellBrowserContext::GetMediaRequestContextForRenderProcess(
163 int renderer_child_id) {
[email protected]b0f146f2011-09-15 22:14:25164 return GetRequestContext();
165}
166
[email protected]55c0eca2012-09-15 05:12:34167net::URLRequestContextGetter*
[email protected]10eb28162012-09-18 03:04:09168 ShellBrowserContext::GetMediaRequestContextForStoragePartition(
[email protected]d30a36f2013-02-07 04:16:26169 const base::FilePath& partition_path,
[email protected]27ddfed22012-10-30 23:22:43170 bool in_memory) {
[email protected]10eb28162012-09-18 03:04:09171 return GetRequestContext();
172}
173
174net::URLRequestContextGetter*
[email protected]7571263c2014-03-10 22:57:09175ShellBrowserContext::CreateRequestContextForStoragePartition(
176 const base::FilePath& partition_path,
177 bool in_memory,
178 ProtocolHandlerMap* protocol_handlers,
[email protected]3b90aab2014-05-30 17:56:15179 URLRequestInterceptorScopedVector request_interceptors) {
[email protected]55c0eca2012-09-15 05:12:34180 return NULL;
181}
182
[email protected]df02aca2012-02-09 21:03:20183ResourceContext* ShellBrowserContext::GetResourceContext() {
[email protected]df02aca2012-02-09 21:03:20184 return resource_context_.get();
[email protected]b0f146f2011-09-15 22:14:25185}
186
[email protected]139355f2014-05-11 14:21:28187BrowserPluginGuestManager* ShellBrowserContext::GetGuestManager() {
188 return guest_manager_;
[email protected]24569262014-05-06 03:31:30189}
190
[email protected]cd501a72014-08-22 19:58:31191storage::SpecialStoragePolicy* ShellBrowserContext::GetSpecialStoragePolicy() {
[email protected]55eb70e762012-02-20 17:38:39192 return NULL;
[email protected]b0f146f2011-09-15 22:14:25193}
194
[email protected]c5c89d042014-06-13 14:43:37195PushMessagingService* ShellBrowserContext::GetPushMessagingService() {
196 return NULL;
197}
198
[email protected]c5bbe0e2014-08-01 23:23:30199SSLHostStateDelegate* ShellBrowserContext::GetSSLHostStateDelegate() {
200 return NULL;
201}
202
mlamouri4e372022015-03-29 14:51:06203PermissionManager* ShellBrowserContext::GetPermissionManager() {
204 if (!permission_manager_.get())
205 permission_manager_.reset(new ShellPermissionManager());
206 return permission_manager_.get();
207}
208
[email protected]b0f146f2011-09-15 22:14:25209} // namespace content