| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // Represents the browser side of the browser <--> renderer communication | 5 // Represents the browser side of the browser <--> renderer communication |
| 6 // channel. There will be one RenderProcessHost per renderer process. | 6 // channel. There will be one RenderProcessHost per renderer process. |
| 7 | 7 |
| 8 #include "content/browser/renderer_host/render_process_host_impl.h" | 8 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 return false; | 242 return false; |
| 243 | 243 |
| 244 if (ChildProcessSecurityPolicy::GetInstance()->HasWebUIBindings( | 244 if (ChildProcessSecurityPolicy::GetInstance()->HasWebUIBindings( |
| 245 host->GetID()) != | 245 host->GetID()) != |
| 246 content::WebUIFactory::Get()->HasWebUIScheme(site_url)) | 246 content::WebUIFactory::Get()->HasWebUIScheme(site_url)) |
| 247 return false; | 247 return false; |
| 248 | 248 |
| 249 return content::GetContentClient()->browser()->IsSuitableHost(host, site_url); | 249 return content::GetContentClient()->browser()->IsSuitableHost(host, site_url); |
| 250 } | 250 } |
| 251 | 251 |
| 252 } // namespace | |
| 253 | |
| 254 // the global list of all renderer processes | 252 // the global list of all renderer processes |
| 255 base::LazyInstance< | 253 base::LazyInstance< |
| 256 IDMap<content::RenderProcessHost>, | 254 IDMap<content::RenderProcessHost>, |
| 257 base::LeakyLazyInstanceTraits<IDMap<content::RenderProcessHost> > > | 255 base::LeakyLazyInstanceTraits<IDMap<content::RenderProcessHost> > > |
| 258 g_all_hosts = LAZY_INSTANCE_INITIALIZER; | 256 g_all_hosts = LAZY_INSTANCE_INITIALIZER; |
| 259 | 257 |
| 258 } // namespace |
| 259 |
| 260 // static | 260 // static |
| 261 bool g_run_renderer_in_process_ = false; | 261 bool g_run_renderer_in_process_ = false; |
| 262 | 262 |
| 263 // static | 263 // static |
| 264 void content::RenderProcessHost::SetMaxRendererProcessCountForTest( | 264 void content::RenderProcessHost::SetMaxRendererProcessCountForTest( |
| 265 size_t count) { | 265 size_t count) { |
| 266 max_renderer_count_override = count; | 266 max_renderer_count_override = count; |
| 267 } | 267 } |
| 268 | 268 |
| 269 RenderProcessHostImpl::RenderProcessHostImpl( | 269 RenderProcessHostImpl::RenderProcessHostImpl( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 base::PLATFORM_FILE_WRITE_ATTRIBUTES | base::PLATFORM_FILE_ENUMERATE); | 316 base::PLATFORM_FILE_WRITE_ATTRIBUTES | base::PLATFORM_FILE_ENUMERATE); |
| 317 // This is so that we can rename the old sandbox out of the way so that we | 317 // This is so that we can rename the old sandbox out of the way so that we |
| 318 // know we've taken care of it. | 318 // know we've taken care of it. |
| 319 ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile( | 319 ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile( |
| 320 GetID(), browser_context->GetPath().Append( | 320 GetID(), browser_context->GetPath().Append( |
| 321 fileapi::SandboxMountPointProvider::kRenamedOldFileSystemDirectory), | 321 fileapi::SandboxMountPointProvider::kRenamedOldFileSystemDirectory), |
| 322 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_CREATE_ALWAYS | | 322 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_CREATE_ALWAYS | |
| 323 base::PLATFORM_FILE_WRITE); | 323 base::PLATFORM_FILE_WRITE); |
| 324 | 324 |
| 325 CHECK(!content::ExitedMainMessageLoop()); | 325 CHECK(!content::ExitedMainMessageLoop()); |
| 326 g_all_hosts.Get().AddWithID(this, GetID()); | 326 RegisterHost(GetID(), this); |
| 327 g_all_hosts.Get().set_check_on_null_data(true); | 327 g_all_hosts.Get().set_check_on_null_data(true); |
| 328 // Initialize |child_process_activity_time_| to a reasonable value. | 328 // Initialize |child_process_activity_time_| to a reasonable value. |
| 329 mark_child_process_activity_time(); | 329 mark_child_process_activity_time(); |
| 330 // Note: When we create the RenderProcessHostImpl, it's technically | 330 // Note: When we create the RenderProcessHostImpl, it's technically |
| 331 // backgrounded, because it has no visible listeners. But the process | 331 // backgrounded, because it has no visible listeners. But the process |
| 332 // doesn't actually exist yet, so we'll Background it later, after | 332 // doesn't actually exist yet, so we'll Background it later, after |
| 333 // creation. | 333 // creation. |
| 334 } | 334 } |
| 335 | 335 |
| 336 RenderProcessHostImpl::~RenderProcessHostImpl() { | 336 RenderProcessHostImpl::~RenderProcessHostImpl() { |
| 337 ChildProcessSecurityPolicy::GetInstance()->Remove(GetID()); | 337 ChildProcessSecurityPolicy::GetInstance()->Remove(GetID()); |
| 338 | 338 |
| 339 // We may have some unsent messages at this point, but that's OK. | 339 // We may have some unsent messages at this point, but that's OK. |
| 340 channel_.reset(); | 340 channel_.reset(); |
| 341 while (!queued_messages_.empty()) { | 341 while (!queued_messages_.empty()) { |
| 342 delete queued_messages_.front(); | 342 delete queued_messages_.front(); |
| 343 queued_messages_.pop(); | 343 queued_messages_.pop(); |
| 344 } | 344 } |
| 345 | 345 |
| 346 ClearTransportDIBCache(); | 346 ClearTransportDIBCache(); |
| 347 if (g_all_hosts.Get().Lookup(GetID())) | 347 UnregisterHost(GetID()); |
| 348 g_all_hosts.Get().Remove(GetID()); | |
| 349 } | 348 } |
| 350 | 349 |
| 351 void RenderProcessHostImpl::EnableSendQueue() { | 350 void RenderProcessHostImpl::EnableSendQueue() { |
| 352 is_initialized_ = false; | 351 is_initialized_ = false; |
| 353 } | 352 } |
| 354 | 353 |
| 355 bool RenderProcessHostImpl::Init(bool is_accessibility_enabled) { | 354 bool RenderProcessHostImpl::Init(bool is_accessibility_enabled) { |
| 356 // calling Init() more than once does nothing, this makes it more convenient | 355 // calling Init() more than once does nothing, this makes it more convenient |
| 357 // for the view host which may not be sure in some cases | 356 // for the view host which may not be sure in some cases |
| 358 if (channel_.get()) | 357 if (channel_.get()) |
| (...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1097 if (listeners_.size() == count) | 1096 if (listeners_.size() == count) |
| 1098 return FastShutdownIfPossible(); | 1097 return FastShutdownIfPossible(); |
| 1099 return false; | 1098 return false; |
| 1100 } | 1099 } |
| 1101 | 1100 |
| 1102 bool RenderProcessHostImpl::FastShutdownStarted() const { | 1101 bool RenderProcessHostImpl::FastShutdownStarted() const { |
| 1103 return fast_shutdown_started_; | 1102 return fast_shutdown_started_; |
| 1104 } | 1103 } |
| 1105 | 1104 |
| 1106 // static | 1105 // static |
| 1106 void RenderProcessHostImpl::RegisterHost(int host_id, |
| 1107 content::RenderProcessHost* host) { |
| 1108 g_all_hosts.Get().AddWithID(host, host_id); |
| 1109 } |
| 1110 |
| 1111 void RenderProcessHostImpl::UnregisterHost(int host_id) { |
| 1112 if (g_all_hosts.Get().Lookup(host_id)) |
| 1113 g_all_hosts.Get().Remove(host_id); |
| 1114 } |
| 1115 |
| 1116 // static |
| 1107 bool content::RenderProcessHost::run_renderer_in_process() { | 1117 bool content::RenderProcessHost::run_renderer_in_process() { |
| 1108 return g_run_renderer_in_process_; | 1118 return g_run_renderer_in_process_; |
| 1109 } | 1119 } |
| 1110 | 1120 |
| 1111 void content::RenderProcessHost::set_run_renderer_in_process(bool value) { | 1121 void content::RenderProcessHost::set_run_renderer_in_process(bool value) { |
| 1112 g_run_renderer_in_process_ = value; | 1122 g_run_renderer_in_process_ = value; |
| 1113 } | 1123 } |
| 1114 | 1124 |
| 1115 content::RenderProcessHost::iterator | 1125 content::RenderProcessHost::iterator |
| 1116 content::RenderProcessHost::AllHostsIterator() { | 1126 content::RenderProcessHost::AllHostsIterator() { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1294 void RenderProcessHostImpl::OnRevealFolderInOS(const FilePath& path) { | 1304 void RenderProcessHostImpl::OnRevealFolderInOS(const FilePath& path) { |
| 1295 // Only honor the request if appropriate persmissions are granted. | 1305 // Only honor the request if appropriate persmissions are granted. |
| 1296 if (ChildProcessSecurityPolicy::GetInstance()->CanReadFile(GetID(), path)) | 1306 if (ChildProcessSecurityPolicy::GetInstance()->CanReadFile(GetID(), path)) |
| 1297 content::GetContentClient()->browser()->OpenItem(path); | 1307 content::GetContentClient()->browser()->OpenItem(path); |
| 1298 } | 1308 } |
| 1299 | 1309 |
| 1300 void RenderProcessHostImpl::OnSavedPageAsMHTML(int job_id, int64 data_size) { | 1310 void RenderProcessHostImpl::OnSavedPageAsMHTML(int job_id, int64 data_size) { |
| 1301 content::GetContentClient()->browser()->GetMHTMLGenerationManager()-> | 1311 content::GetContentClient()->browser()->GetMHTMLGenerationManager()-> |
| 1302 MHTMLGenerated(job_id, data_size); | 1312 MHTMLGenerated(job_id, data_size); |
| 1303 } | 1313 } |
| OLD | NEW |