blob: b4d9539fe53558838fecc540b7967b9592e7e68e [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"
[email protected]b0f146f2011-09-15 22:14:2510#include "base/file_util.h"
11#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/resource_context.h"
16#include "content/public/browser/storage_partition.h"
17#include "content/public/common/content_switches.h"
[email protected]de7d61ff2013-08-20 11:30:4118#include "content/shell/browser/shell_download_manager_delegate.h"
19#include "content/shell/browser/shell_url_request_context_getter.h"
[email protected]b7c504c2013-05-07 14:42:1220#include "content/shell/common/shell_switches.h"
[email protected]b0f146f2011-09-15 22:14:2521
22#if defined(OS_WIN)
23#include "base/base_paths_win.h"
[email protected]5cba3bf2012-01-14 02:40:3524#elif defined(OS_LINUX)
25#include "base/nix/xdg_util.h"
[email protected]80ec0b72012-03-22 22:45:2726#elif defined(OS_MACOSX)
27#include "base/base_paths_mac.h"
[email protected]b0f146f2011-09-15 22:14:2528#endif
29
[email protected]810ddc52012-01-24 01:00:3530namespace content {
31
[email protected]6bd30072013-02-08 18:17:1132class ShellBrowserContext::ShellResourceContext : public ResourceContext {
33 public:
34 ShellResourceContext() : getter_(NULL) {}
35 virtual ~ShellResourceContext() {}
36
37 // ResourceContext implementation:
38 virtual net::HostResolver* GetHostResolver() OVERRIDE {
39 CHECK(getter_);
40 return getter_->host_resolver();
41 }
42 virtual net::URLRequestContext* GetRequestContext() OVERRIDE {
43 CHECK(getter_);
44 return getter_->GetURLRequestContext();
45 }
[email protected]d07190a2013-08-06 22:12:3946 virtual bool AllowMicAccess(const GURL& origin) OVERRIDE {
47 return false;
48 }
49 virtual bool AllowCameraAccess(const GURL& origin) OVERRIDE {
50 return false;
51 }
[email protected]6bd30072013-02-08 18:17:1152
53 void set_url_request_context_getter(ShellURLRequestContextGetter* getter) {
54 getter_ = getter;
55 }
56
57 private:
58 ShellURLRequestContextGetter* getter_;
59
60 DISALLOW_COPY_AND_ASSIGN(ShellResourceContext);
61};
62
[email protected]d5869bf2013-07-03 16:21:4763ShellBrowserContext::ShellBrowserContext(bool off_the_record,
64 net::NetLog* net_log)
[email protected]c2dad292012-09-07 21:27:3565 : off_the_record_(off_the_record),
[email protected]d5869bf2013-07-03 16:21:4766 net_log_(net_log),
[email protected]6bd30072013-02-08 18:17:1167 ignore_certificate_errors_(false),
[email protected]139355f2014-05-11 14:21:2868 guest_manager_(NULL),
[email protected]6bd30072013-02-08 18:17:1169 resource_context_(new ShellResourceContext) {
[email protected]11a65b692012-03-30 11:29:1670 InitWhileIOAllowed();
[email protected]b0f146f2011-09-15 22:14:2571}
72
73ShellBrowserContext::~ShellBrowserContext() {
[email protected]59383c782013-04-17 16:43:2774 if (resource_context_) {
[email protected]e99ca5112011-09-26 17:22:5475 BrowserThread::DeleteSoon(
76 BrowserThread::IO, FROM_HERE, resource_context_.release());
77 }
[email protected]b0f146f2011-09-15 22:14:2578}
79
[email protected]11a65b692012-03-30 11:29:1680void ShellBrowserContext::InitWhileIOAllowed() {
[email protected]aae34062012-07-19 15:52:1581 CommandLine* cmd_line = CommandLine::ForCurrentProcess();
[email protected]d22dc092012-11-19 20:35:5682 if (cmd_line->HasSwitch(switches::kIgnoreCertificateErrors) ||
83 cmd_line->HasSwitch(switches::kDumpRenderTree)) {
[email protected]c2dad292012-09-07 21:27:3584 ignore_certificate_errors_ = true;
[email protected]d22dc092012-11-19 20:35:5685 }
[email protected]e1cf85a22012-08-17 22:39:2386 if (cmd_line->HasSwitch(switches::kContentShellDataPath)) {
87 path_ = cmd_line->GetSwitchValuePath(switches::kContentShellDataPath);
88 return;
89 }
[email protected]b0f146f2011-09-15 22:14:2590#if defined(OS_WIN)
[email protected]e99ca5112011-09-26 17:22:5491 CHECK(PathService::Get(base::DIR_LOCAL_APP_DATA, &path_));
92 path_ = path_.Append(std::wstring(L"content_shell"));
[email protected]5cba3bf2012-01-14 02:40:3593#elif defined(OS_LINUX)
94 scoped_ptr<base::Environment> env(base::Environment::Create());
[email protected]d30a36f2013-02-07 04:16:2695 base::FilePath config_dir(
[email protected]9528c9a2012-06-13 23:20:2296 base::nix::GetXDGDirectory(env.get(),
97 base::nix::kXdgConfigHomeEnvVar,
98 base::nix::kDotConfigDir));
[email protected]5cba3bf2012-01-14 02:40:3599 path_ = config_dir.Append("content_shell");
[email protected]80ec0b72012-03-22 22:45:27100#elif defined(OS_MACOSX)
101 CHECK(PathService::Get(base::DIR_APP_DATA, &path_));
102 path_ = path_.Append("Chromium Content Shell");
[email protected]70a7f1192012-06-08 01:31:34103#elif defined(OS_ANDROID)
[email protected]c3bf75252013-03-18 22:11:48104 CHECK(PathService::Get(base::DIR_ANDROID_APP_DATA, &path_));
[email protected]70a7f1192012-06-08 01:31:34105 path_ = path_.Append(FILE_PATH_LITERAL("content_shell"));
[email protected]b0f146f2011-09-15 22:14:25106#else
107 NOTIMPLEMENTED();
108#endif
109
[email protected]7567484142013-07-11 17:36:07110 if (!base::PathExists(path_))
[email protected]426d1c92013-12-03 20:08:54111 base::CreateDirectory(path_);
[email protected]11a65b692012-03-30 11:29:16112}
[email protected]b0f146f2011-09-15 22:14:25113
[email protected]4251165a2013-07-17 04:33:40114base::FilePath ShellBrowserContext::GetPath() const {
[email protected]e99ca5112011-09-26 17:22:54115 return path_;
[email protected]b0f146f2011-09-15 22:14:25116}
117
[email protected]27d6e852012-03-02 21:31:32118bool ShellBrowserContext::IsOffTheRecord() const {
[email protected]71d504f2012-07-25 17:15:28119 return off_the_record_;
[email protected]b0f146f2011-09-15 22:14:25120}
121
[email protected]b441a8492012-06-06 14:55:57122DownloadManagerDelegate* ShellBrowserContext::GetDownloadManagerDelegate() {
[email protected]08c92ac2012-08-21 23:41:40123 DownloadManager* manager = BrowserContext::GetDownloadManager(this);
124
[email protected]fc72bb12013-06-02 21:13:46125 if (!download_manager_delegate_.get()) {
[email protected]7cef82172013-12-17 06:58:37126 download_manager_delegate_.reset(new ShellDownloadManagerDelegate());
[email protected]59002092012-08-27 19:42:56127 download_manager_delegate_->SetDownloadManager(manager);
[email protected]17bc408b22013-01-10 18:40:08128 CommandLine* cmd_line = CommandLine::ForCurrentProcess();
129 if (cmd_line->HasSwitch(switches::kDumpRenderTree)) {
130 download_manager_delegate_->SetDownloadBehaviorForTesting(
131 path_.Append(FILE_PATH_LITERAL("downloads")));
132 }
[email protected]59002092012-08-27 19:42:56133 }
[email protected]08c92ac2012-08-21 23:41:40134
[email protected]b441a8492012-06-06 14:55:57135 return download_manager_delegate_.get();
[email protected]b0f146f2011-09-15 22:14:25136}
137
[email protected]b0f146f2011-09-15 22:14:25138net::URLRequestContextGetter* ShellBrowserContext::GetRequestContext() {
[email protected]6bd30072013-02-08 18:17:11139 return GetDefaultStoragePartition(this)->GetURLRequestContext();
140}
141
142net::URLRequestContextGetter* ShellBrowserContext::CreateRequestContext(
[email protected]7571263c2014-03-10 22:57:09143 ProtocolHandlerMap* protocol_handlers,
[email protected]3b90aab2014-05-30 17:56:15144 URLRequestInterceptorScopedVector request_interceptors) {
[email protected]fc72bb12013-06-02 21:13:46145 DCHECK(!url_request_getter_.get());
[email protected]6bd30072013-02-08 18:17:11146 url_request_getter_ = new ShellURLRequestContextGetter(
147 ignore_certificate_errors_,
148 GetPath(),
149 BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO),
150 BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE),
[email protected]d5869bf2013-07-03 16:21:47151 protocol_handlers,
[email protected]3b90aab2014-05-30 17:56:15152 request_interceptors.Pass(),
[email protected]d5869bf2013-07-03 16:21:47153 net_log_);
[email protected]6bd30072013-02-08 18:17:11154 resource_context_->set_url_request_context_getter(url_request_getter_.get());
155 return url_request_getter_.get();
[email protected]b0f146f2011-09-15 22:14:25156}
157
158net::URLRequestContextGetter*
159 ShellBrowserContext::GetRequestContextForRenderProcess(
160 int renderer_child_id) {
161 return GetRequestContext();
162}
163
164net::URLRequestContextGetter*
[email protected]10705a7b2012-08-21 19:07:08165 ShellBrowserContext::GetMediaRequestContext() {
166 return GetRequestContext();
167}
168
169net::URLRequestContextGetter*
170 ShellBrowserContext::GetMediaRequestContextForRenderProcess(
171 int renderer_child_id) {
[email protected]b0f146f2011-09-15 22:14:25172 return GetRequestContext();
173}
174
[email protected]55c0eca2012-09-15 05:12:34175net::URLRequestContextGetter*
[email protected]10eb28162012-09-18 03:04:09176 ShellBrowserContext::GetMediaRequestContextForStoragePartition(
[email protected]d30a36f2013-02-07 04:16:26177 const base::FilePath& partition_path,
[email protected]27ddfed22012-10-30 23:22:43178 bool in_memory) {
[email protected]10eb28162012-09-18 03:04:09179 return GetRequestContext();
180}
181
[email protected]6e068ea2014-02-04 07:05:47182void ShellBrowserContext::RequestMidiSysExPermission(
[email protected]8aca7252013-07-12 19:18:59183 int render_process_id,
184 int render_view_id,
[email protected]00880a02013-10-30 03:18:30185 int bridge_id,
[email protected]8aca7252013-07-12 19:18:59186 const GURL& requesting_frame,
[email protected]7c6d9482014-03-28 20:19:31187 bool user_gesture,
[email protected]6e068ea2014-02-04 07:05:47188 const MidiSysExPermissionCallback& callback) {
[email protected]19027322013-07-23 11:46:52189 // Always reject requests for LayoutTests for now.
[email protected]8aca7252013-07-12 19:18:59190 // TODO(toyoshim): Make it programmable to improve test coverage.
[email protected]6e068ea2014-02-04 07:05:47191 if (!CommandLine::ForCurrentProcess()->HasSwitch(
192 switches::kDumpRenderTree)) {
[email protected]19027322013-07-23 11:46:52193 callback.Run(false);
194 return;
195 }
[email protected]bccdcd92014-01-03 05:30:03196 callback.Run(true);
[email protected]8aca7252013-07-12 19:18:59197}
198
[email protected]6e068ea2014-02-04 07:05:47199void ShellBrowserContext::CancelMidiSysExPermissionRequest(
[email protected]00880a02013-10-30 03:18:30200 int render_process_id,
201 int render_view_id,
202 int bridge_id,
203 const GURL& requesting_frame) {
204}
205
[email protected]566755f82014-01-08 01:14:57206void ShellBrowserContext::RequestProtectedMediaIdentifierPermission(
207 int render_process_id,
208 int render_view_id,
[email protected]5e170a52014-05-29 03:09:02209 const GURL& origin,
[email protected]566755f82014-01-08 01:14:57210 const ProtectedMediaIdentifierPermissionCallback& callback) {
211 callback.Run(true);
212}
213
214void ShellBrowserContext::CancelProtectedMediaIdentifierPermissionRequests(
[email protected]5e170a52014-05-29 03:09:02215 int render_process_id,
216 int render_view_id,
217 const GURL& origin) {
[email protected]566755f82014-01-08 01:14:57218}
219
[email protected]10eb28162012-09-18 03:04:09220net::URLRequestContextGetter*
[email protected]7571263c2014-03-10 22:57:09221ShellBrowserContext::CreateRequestContextForStoragePartition(
222 const base::FilePath& partition_path,
223 bool in_memory,
224 ProtocolHandlerMap* protocol_handlers,
[email protected]3b90aab2014-05-30 17:56:15225 URLRequestInterceptorScopedVector request_interceptors) {
[email protected]55c0eca2012-09-15 05:12:34226 return NULL;
227}
228
[email protected]df02aca2012-02-09 21:03:20229ResourceContext* ShellBrowserContext::GetResourceContext() {
[email protected]df02aca2012-02-09 21:03:20230 return resource_context_.get();
[email protected]b0f146f2011-09-15 22:14:25231}
232
[email protected]b0f146f2011-09-15 22:14:25233GeolocationPermissionContext*
234 ShellBrowserContext::GetGeolocationPermissionContext() {
[email protected]30e3e9a62012-06-07 20:46:57235 return NULL;
[email protected]b0f146f2011-09-15 22:14:25236}
237
[email protected]139355f2014-05-11 14:21:28238BrowserPluginGuestManager* ShellBrowserContext::GetGuestManager() {
239 return guest_manager_;
[email protected]24569262014-05-06 03:31:30240}
241
[email protected]55eb70e762012-02-20 17:38:39242quota::SpecialStoragePolicy* ShellBrowserContext::GetSpecialStoragePolicy() {
243 return NULL;
[email protected]b0f146f2011-09-15 22:14:25244}
245
[email protected]c5c89d042014-06-13 14:43:37246PushMessagingService* ShellBrowserContext::GetPushMessagingService() {
247 return NULL;
248}
249
[email protected]b0f146f2011-09-15 22:14:25250} // namespace content