| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 #include "content/browser/renderer_host/text_input_client_message_filter.h" | 96 #include "content/browser/renderer_host/text_input_client_message_filter.h" |
| 97 #include "content/browser/renderer_host/websocket_dispatcher_host.h" | 97 #include "content/browser/renderer_host/websocket_dispatcher_host.h" |
| 98 #include "content/browser/resolve_proxy_msg_helper.h" | 98 #include "content/browser/resolve_proxy_msg_helper.h" |
| 99 #include "content/browser/service_worker/service_worker_context_wrapper.h" | 99 #include "content/browser/service_worker/service_worker_context_wrapper.h" |
| 100 #include "content/browser/service_worker/service_worker_dispatcher_host.h" | 100 #include "content/browser/service_worker/service_worker_dispatcher_host.h" |
| 101 #include "content/browser/shared_worker/shared_worker_message_filter.h" | 101 #include "content/browser/shared_worker/shared_worker_message_filter.h" |
| 102 #include "content/browser/speech/speech_recognition_dispatcher_host.h" | 102 #include "content/browser/speech/speech_recognition_dispatcher_host.h" |
| 103 #include "content/browser/storage_partition_impl.h" | 103 #include "content/browser/storage_partition_impl.h" |
| 104 #include "content/browser/streams/stream_context.h" | 104 #include "content/browser/streams/stream_context.h" |
| 105 #include "content/browser/tracing/trace_message_filter.h" | 105 #include "content/browser/tracing/trace_message_filter.h" |
| 106 #include "content/browser/transition_request_manager.h" |
| 106 #include "content/browser/vibration/vibration_message_filter.h" | 107 #include "content/browser/vibration/vibration_message_filter.h" |
| 107 #include "content/browser/webui/web_ui_controller_factory_registry.h" | 108 #include "content/browser/webui/web_ui_controller_factory_registry.h" |
| 108 #include "content/browser/worker_host/worker_message_filter.h" | 109 #include "content/browser/worker_host/worker_message_filter.h" |
| 109 #include "content/browser/worker_host/worker_storage_partition.h" | 110 #include "content/browser/worker_host/worker_storage_partition.h" |
| 110 #include "content/common/child_process_host_impl.h" | 111 #include "content/common/child_process_host_impl.h" |
| 111 #include "content/common/child_process_messages.h" | 112 #include "content/common/child_process_messages.h" |
| 112 #include "content/common/content_switches_internal.h" | 113 #include "content/common/content_switches_internal.h" |
| 113 #include "content/common/gpu/client/gpu_memory_buffer_impl.h" | 114 #include "content/common/gpu/client/gpu_memory_buffer_impl.h" |
| 114 #include "content/common/gpu/client/gpu_memory_buffer_impl_shm.h" | 115 #include "content/common/gpu/client/gpu_memory_buffer_impl_shm.h" |
| 115 #include "content/common/gpu/gpu_messages.h" | 116 #include "content/common/gpu/gpu_messages.h" |
| (...skipping 1658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1774 // dedicated to. Allowing no sharing is simpler for now.) This may cause | 1775 // dedicated to. Allowing no sharing is simpler for now.) This may cause |
| 1775 // resource exhaustion issues if too many sites are open at once. | 1776 // resource exhaustion issues if too many sites are open at once. |
| 1776 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 1777 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 1777 if (command_line.HasSwitch(switches::kEnableStrictSiteIsolation) || | 1778 if (command_line.HasSwitch(switches::kEnableStrictSiteIsolation) || |
| 1778 command_line.HasSwitch(switches::kSitePerProcess)) | 1779 command_line.HasSwitch(switches::kSitePerProcess)) |
| 1779 return false; | 1780 return false; |
| 1780 | 1781 |
| 1781 if (run_renderer_in_process()) | 1782 if (run_renderer_in_process()) |
| 1782 return true; | 1783 return true; |
| 1783 | 1784 |
| 1785 // If this is a transition, we want to use GetExistingProcessHost to find |
| 1786 // the appropriate renderer process to use. |
| 1787 if (url.SchemeIs(kNavigationTransitionScheme)) |
| 1788 return true; |
| 1789 |
| 1784 // NOTE: Sometimes it's necessary to create more render processes than | 1790 // NOTE: Sometimes it's necessary to create more render processes than |
| 1785 // GetMaxRendererProcessCount(), for instance when we want to create | 1791 // GetMaxRendererProcessCount(), for instance when we want to create |
| 1786 // a renderer process for a browser context that has no existing | 1792 // a renderer process for a browser context that has no existing |
| 1787 // renderers. This is OK in moderation, since the | 1793 // renderers. This is OK in moderation, since the |
| 1788 // GetMaxRendererProcessCount() is conservative. | 1794 // GetMaxRendererProcessCount() is conservative. |
| 1789 if (g_all_hosts.Get().size() >= GetMaxRendererProcessCount()) | 1795 if (g_all_hosts.Get().size() >= GetMaxRendererProcessCount()) |
| 1790 return true; | 1796 return true; |
| 1791 | 1797 |
| 1792 return GetContentClient()->browser()-> | 1798 return GetContentClient()->browser()-> |
| 1793 ShouldTryToUseExistingProcessHost(browser_context, url); | 1799 ShouldTryToUseExistingProcessHost(browser_context, url); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1805 while (!iter.IsAtEnd()) { | 1811 while (!iter.IsAtEnd()) { |
| 1806 if (GetContentClient()->browser()->MayReuseHost(iter.GetCurrentValue()) && | 1812 if (GetContentClient()->browser()->MayReuseHost(iter.GetCurrentValue()) && |
| 1807 RenderProcessHostImpl::IsSuitableHost( | 1813 RenderProcessHostImpl::IsSuitableHost( |
| 1808 iter.GetCurrentValue(), | 1814 iter.GetCurrentValue(), |
| 1809 browser_context, site_url)) { | 1815 browser_context, site_url)) { |
| 1810 suitable_renderers.push_back(iter.GetCurrentValue()); | 1816 suitable_renderers.push_back(iter.GetCurrentValue()); |
| 1811 } | 1817 } |
| 1812 iter.Advance(); | 1818 iter.Advance(); |
| 1813 } | 1819 } |
| 1814 | 1820 |
| 1821 int preferred_process_id = |
| 1822 TransitionRequestManager::GetInstance()-> |
| 1823 GetPendingTransitionProcessIDByToken(site_url); |
| 1824 |
| 1825 if (preferred_process_id != ChildProcessHost::kInvalidUniqueID) { |
| 1826 for (std::vector<RenderProcessHost*>::iterator it = |
| 1827 suitable_renderers.begin(); it != suitable_renderers.end(); ++it) { |
| 1828 RenderProcessHost* current_host = *it; |
| 1829 if (current_host->GetID() == preferred_process_id) { |
| 1830 if (RenderProcessHostImpl::IsSuitableHost(current_host, |
| 1831 browser_context, |
| 1832 site_url)) |
| 1833 return current_host; |
| 1834 break; |
| 1835 } |
| 1836 } |
| 1837 } |
| 1838 |
| 1815 // Now pick a random suitable renderer, if we have any. | 1839 // Now pick a random suitable renderer, if we have any. |
| 1816 if (!suitable_renderers.empty()) { | 1840 if (!suitable_renderers.empty()) { |
| 1817 int suitable_count = static_cast<int>(suitable_renderers.size()); | 1841 int suitable_count = static_cast<int>(suitable_renderers.size()); |
| 1818 int random_index = base::RandInt(0, suitable_count - 1); | 1842 int random_index = base::RandInt(0, suitable_count - 1); |
| 1819 return suitable_renderers[random_index]; | 1843 return suitable_renderers[random_index]; |
| 1820 } | 1844 } |
| 1821 | 1845 |
| 1822 return NULL; | 1846 return NULL; |
| 1823 } | 1847 } |
| 1824 | 1848 |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2361 void RenderProcessHostImpl::GpuMemoryBufferAllocated( | 2385 void RenderProcessHostImpl::GpuMemoryBufferAllocated( |
| 2362 IPC::Message* reply, | 2386 IPC::Message* reply, |
| 2363 const gfx::GpuMemoryBufferHandle& handle) { | 2387 const gfx::GpuMemoryBufferHandle& handle) { |
| 2364 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 2388 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 2365 ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer::WriteReplyParams(reply, | 2389 ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer::WriteReplyParams(reply, |
| 2366 handle); | 2390 handle); |
| 2367 Send(reply); | 2391 Send(reply); |
| 2368 } | 2392 } |
| 2369 | 2393 |
| 2370 } // namespace content | 2394 } // namespace content |
| OLD | NEW |