// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include "base/command_line.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_switches.h" #include "content/public/test/mock_render_process_host.h" #include "content/test/test_render_view_host.h" namespace content { class RenderProcessHostUnitTest : public RenderViewHostTestHarness {}; // Tests that guest RenderProcessHosts are not considered suitable hosts when // searching for RenderProcessHost. TEST_F(RenderProcessHostUnitTest, GuestsAreNotSuitableHosts) { GURL test_url("http://foo.com"); MockRenderProcessHost guest_host(browser_context()); guest_host.set_is_isolated_guest(true); EXPECT_FALSE(RenderProcessHostImpl::IsSuitableHost( &guest_host, browser_context(), test_url)); EXPECT_TRUE(RenderProcessHostImpl::IsSuitableHost( process(), browser_context(), test_url)); EXPECT_EQ( process(), RenderProcessHost::GetExistingProcessHost(browser_context(), test_url)); } #if !defined(OS_ANDROID) TEST_F(RenderProcessHostUnitTest, RendererProcessLimit) { // This test shouldn't run with --site-per-process or // --enable-strict-site-isolation modes, since they don't allow renderer // process reuse, which this test explicitly exercises. const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); if (command_line.HasSwitch(switches::kSitePerProcess) || command_line.HasSwitch(switches::kEnableStrictSiteIsolation)) return; // Disable any overrides. RenderProcessHostImpl::SetMaxRendererProcessCount(0); // Verify that the limit is between 1 and kMaxRendererProcessCount. EXPECT_GT(RenderProcessHostImpl::GetMaxRendererProcessCount(), 0u); EXPECT_LE(RenderProcessHostImpl::GetMaxRendererProcessCount(), kMaxRendererProcessCount); // Add dummy process hosts to saturate the limit. ASSERT_NE(0u, kMaxRendererProcessCount); ScopedVector hosts; for (size_t i = 0; i < kMaxRendererProcessCount; ++i) { hosts.push_back(new MockRenderProcessHost(browser_context())); } // Verify that the renderer sharing will happen. GURL test_url("http://foo.com"); EXPECT_TRUE(RenderProcessHostImpl::ShouldTryToUseExistingProcessHost( browser_context(), test_url)); } #endif #if defined(OS_ANDROID) TEST_F(RenderProcessHostUnitTest, NoRendererProcessLimitOnAndroid) { // Disable any overrides. RenderProcessHostImpl::SetMaxRendererProcessCount(0); // Verify that by default the limit on Android returns max size_t. EXPECT_EQ(std::numeric_limits::max(), RenderProcessHostImpl::GetMaxRendererProcessCount()); // Add a few dummy process hosts. ASSERT_NE(0u, kMaxRendererProcessCount); ScopedVector hosts; for (size_t i = 0; i < kMaxRendererProcessCount; ++i) { hosts.push_back(new MockRenderProcessHost(browser_context())); } // Verify that the renderer sharing still won't happen. GURL test_url("http://foo.com"); EXPECT_FALSE(RenderProcessHostImpl::ShouldTryToUseExistingProcessHost( browser_context(), test_url)); } #endif } // namespace content