Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: content/shell/shell_content_browser_client.cc

Issue 23316003: [content shell] move browser process stuff into browser/ subdir (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/shell/shell_content_browser_client.h ('k') | content/shell/shell_devtools_delegate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/shell/shell_content_browser_client.h"
6
7 #include "base/command_line.h"
8 #include "base/file_util.h"
9 #include "base/path_service.h"
10 #include "content/public/browser/notification_service.h"
11 #include "content/public/browser/notification_types.h"
12 #include "content/public/browser/render_process_host.h"
13 #include "content/public/browser/resource_dispatcher_host.h"
14 #include "content/public/browser/storage_partition.h"
15 #include "content/public/common/content_switches.h"
16 #include "content/public/common/url_constants.h"
17 #include "content/shell/common/shell_messages.h"
18 #include "content/shell/common/shell_switches.h"
19 #include "content/shell/common/webkit_test_helpers.h"
20 #include "content/shell/geolocation/shell_access_token_store.h"
21 #include "content/shell/shell.h"
22 #include "content/shell/shell_browser_context.h"
23 #include "content/shell/shell_browser_main_parts.h"
24 #include "content/shell/shell_devtools_delegate.h"
25 #include "content/shell/shell_message_filter.h"
26 #include "content/shell/shell_net_log.h"
27 #include "content/shell/shell_quota_permission_context.h"
28 #include "content/shell/shell_resource_dispatcher_host_delegate.h"
29 #include "content/shell/shell_web_contents_view_delegate_creator.h"
30 #include "content/shell/webkit_test_controller.h"
31 #include "net/url_request/url_request_context_getter.h"
32 #include "url/gurl.h"
33 #include "webkit/common/webpreferences.h"
34
35 #if defined(OS_ANDROID)
36 #include "base/android/path_utils.h"
37 #include "base/path_service.h"
38 #include "base/platform_file.h"
39 #include "content/shell/android/shell_descriptors.h"
40 #endif
41
42 namespace content {
43
44 namespace {
45
46 ShellContentBrowserClient* g_browser_client;
47 bool g_swap_processes_for_redirect = false;
48
49 } // namespace
50
51 ShellContentBrowserClient* ShellContentBrowserClient::Get() {
52 return g_browser_client;
53 }
54
55 void ShellContentBrowserClient::SetSwapProcessesForRedirect(bool swap) {
56 g_swap_processes_for_redirect = swap;
57 }
58
59 ShellContentBrowserClient::ShellContentBrowserClient()
60 : shell_browser_main_parts_(NULL) {
61 DCHECK(!g_browser_client);
62 g_browser_client = this;
63 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
64 return;
65 webkit_source_dir_ = GetWebKitRootDirFilePath();
66 }
67
68 ShellContentBrowserClient::~ShellContentBrowserClient() {
69 g_browser_client = NULL;
70 }
71
72 BrowserMainParts* ShellContentBrowserClient::CreateBrowserMainParts(
73 const MainFunctionParams& parameters) {
74 shell_browser_main_parts_ = new ShellBrowserMainParts(parameters);
75 return shell_browser_main_parts_;
76 }
77
78 void ShellContentBrowserClient::RenderProcessHostCreated(
79 RenderProcessHost* host) {
80 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
81 return;
82 host->GetChannel()->AddFilter(new ShellMessageFilter(
83 host->GetID(),
84 BrowserContext::GetDefaultStoragePartition(browser_context())
85 ->GetDatabaseTracker(),
86 BrowserContext::GetDefaultStoragePartition(browser_context())
87 ->GetQuotaManager(),
88 BrowserContext::GetDefaultStoragePartition(browser_context())
89 ->GetURLRequestContext()));
90 host->Send(new ShellViewMsg_SetWebKitSourceDir(webkit_source_dir_));
91 registrar_.Add(this,
92 NOTIFICATION_RENDERER_PROCESS_CREATED,
93 Source<RenderProcessHost>(host));
94 registrar_.Add(this,
95 NOTIFICATION_RENDERER_PROCESS_TERMINATED,
96 Source<RenderProcessHost>(host));
97 }
98
99 net::URLRequestContextGetter* ShellContentBrowserClient::CreateRequestContext(
100 BrowserContext* content_browser_context,
101 ProtocolHandlerMap* protocol_handlers) {
102 ShellBrowserContext* shell_browser_context =
103 ShellBrowserContextForBrowserContext(content_browser_context);
104 return shell_browser_context->CreateRequestContext(protocol_handlers);
105 }
106
107 net::URLRequestContextGetter*
108 ShellContentBrowserClient::CreateRequestContextForStoragePartition(
109 BrowserContext* content_browser_context,
110 const base::FilePath& partition_path,
111 bool in_memory,
112 ProtocolHandlerMap* protocol_handlers) {
113 ShellBrowserContext* shell_browser_context =
114 ShellBrowserContextForBrowserContext(content_browser_context);
115 return shell_browser_context->CreateRequestContextForStoragePartition(
116 partition_path, in_memory, protocol_handlers);
117 }
118
119 bool ShellContentBrowserClient::IsHandledURL(const GURL& url) {
120 if (!url.is_valid())
121 return false;
122 DCHECK_EQ(url.scheme(), StringToLowerASCII(url.scheme()));
123 // Keep in sync with ProtocolHandlers added by
124 // ShellURLRequestContextGetter::GetURLRequestContext().
125 static const char* const kProtocolList[] = {
126 chrome::kBlobScheme,
127 chrome::kFileSystemScheme,
128 chrome::kChromeUIScheme,
129 chrome::kChromeDevToolsScheme,
130 chrome::kDataScheme,
131 chrome::kFileScheme,
132 };
133 for (size_t i = 0; i < arraysize(kProtocolList); ++i) {
134 if (url.scheme() == kProtocolList[i])
135 return true;
136 }
137 return false;
138 }
139
140 void ShellContentBrowserClient::AppendExtraCommandLineSwitches(
141 CommandLine* command_line, int child_process_id) {
142 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
143 command_line->AppendSwitch(switches::kDumpRenderTree);
144 if (CommandLine::ForCurrentProcess()->HasSwitch(
145 switches::kExposeInternalsForTesting))
146 command_line->AppendSwitch(switches::kExposeInternalsForTesting);
147 }
148
149 void ShellContentBrowserClient::OverrideWebkitPrefs(
150 RenderViewHost* render_view_host,
151 const GURL& url,
152 WebPreferences* prefs) {
153 if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
154 return;
155 WebKitTestController::Get()->OverrideWebkitPrefs(prefs);
156 }
157
158 void ShellContentBrowserClient::ResourceDispatcherHostCreated() {
159 resource_dispatcher_host_delegate_.reset(
160 new ShellResourceDispatcherHostDelegate());
161 ResourceDispatcherHost::Get()->SetDelegate(
162 resource_dispatcher_host_delegate_.get());
163 }
164
165 std::string ShellContentBrowserClient::GetDefaultDownloadName() {
166 return "download";
167 }
168
169 bool ShellContentBrowserClient::SupportsBrowserPlugin(
170 content::BrowserContext* browser_context, const GURL& url) {
171 return CommandLine::ForCurrentProcess()->HasSwitch(
172 switches::kEnableBrowserPluginForAllViewTypes);
173 }
174
175 WebContentsViewDelegate* ShellContentBrowserClient::GetWebContentsViewDelegate(
176 WebContents* web_contents) {
177 #if !defined(USE_AURA)
178 return CreateShellWebContentsViewDelegate(web_contents);
179 #else
180 return NULL;
181 #endif
182 }
183
184 QuotaPermissionContext*
185 ShellContentBrowserClient::CreateQuotaPermissionContext() {
186 return new ShellQuotaPermissionContext();
187 }
188
189 net::NetLog* ShellContentBrowserClient::GetNetLog() {
190 return shell_browser_main_parts_->net_log();
191 }
192
193 bool ShellContentBrowserClient::ShouldSwapProcessesForRedirect(
194 ResourceContext* resource_context,
195 const GURL& current_url,
196 const GURL& new_url) {
197 return g_swap_processes_for_redirect;
198 }
199
200 #if defined(OS_ANDROID)
201 void ShellContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
202 const CommandLine& command_line,
203 int child_process_id,
204 std::vector<content::FileDescriptorInfo>* mappings) {
205 int flags = base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ;
206 base::FilePath pak_file;
207 bool r = PathService::Get(base::DIR_ANDROID_APP_DATA, &pak_file);
208 CHECK(r);
209 pak_file = pak_file.Append(FILE_PATH_LITERAL("paks"));
210 pak_file = pak_file.Append(FILE_PATH_LITERAL("content_shell.pak"));
211
212 base::PlatformFile f =
213 base::CreatePlatformFile(pak_file, flags, NULL, NULL);
214 if (f == base::kInvalidPlatformFileValue) {
215 NOTREACHED() << "Failed to open file when creating renderer process: "
216 << "content_shell.pak";
217 }
218 mappings->push_back(
219 content::FileDescriptorInfo(kShellPakDescriptor,
220 base::FileDescriptor(f, true)));
221 }
222 #endif
223
224 void ShellContentBrowserClient::Observe(int type,
225 const NotificationSource& source,
226 const NotificationDetails& details) {
227 switch (type) {
228 case NOTIFICATION_RENDERER_PROCESS_CREATED: {
229 registrar_.Remove(this,
230 NOTIFICATION_RENDERER_PROCESS_CREATED,
231 source);
232 registrar_.Remove(this,
233 NOTIFICATION_RENDERER_PROCESS_TERMINATED,
234 source);
235 break;
236 }
237
238 case NOTIFICATION_RENDERER_PROCESS_TERMINATED: {
239 registrar_.Remove(this,
240 NOTIFICATION_RENDERER_PROCESS_CREATED,
241 source);
242 registrar_.Remove(this,
243 NOTIFICATION_RENDERER_PROCESS_TERMINATED,
244 source);
245 break;
246 }
247
248 default:
249 NOTREACHED();
250 }
251 }
252
253 ShellBrowserContext* ShellContentBrowserClient::browser_context() {
254 return shell_browser_main_parts_->browser_context();
255 }
256
257 ShellBrowserContext*
258 ShellContentBrowserClient::off_the_record_browser_context() {
259 return shell_browser_main_parts_->off_the_record_browser_context();
260 }
261
262 AccessTokenStore* ShellContentBrowserClient::CreateAccessTokenStore() {
263 return new ShellAccessTokenStore(browser_context());
264 }
265
266 ShellBrowserContext*
267 ShellContentBrowserClient::ShellBrowserContextForBrowserContext(
268 BrowserContext* content_browser_context) {
269 if (content_browser_context == browser_context())
270 return browser_context();
271 DCHECK_EQ(content_browser_context, off_the_record_browser_context());
272 return off_the_record_browser_context();
273 }
274
275 } // namespace content
OLDNEW
« no previous file with comments | « content/shell/shell_content_browser_client.h ('k') | content/shell/shell_devtools_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698