| Index: chrome/browser/renderer_host/test/render_process_host_browsertest.cc | 
| =================================================================== | 
| --- chrome/browser/renderer_host/test/render_process_host_browsertest.cc	(revision 70813) | 
| +++ chrome/browser/renderer_host/test/render_process_host_browsertest.cc	(working copy) | 
| @@ -2,10 +2,12 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| +#include "base/command_line.h" | 
| #include "chrome/browser/renderer_host/site_instance.h" | 
| #include "chrome/browser/tab_contents/tab_contents.h" | 
| #include "chrome/browser/renderer_host/render_process_host.h" | 
| #include "chrome/browser/ui/browser.h" | 
| +#include "chrome/common/chrome_switches.h" | 
| #include "chrome/common/url_constants.h" | 
| #include "chrome/test/in_process_browser_test.h" | 
| #include "chrome/test/ui_test_utils.h" | 
| @@ -28,6 +30,58 @@ | 
| } | 
| }; | 
|  | 
| +IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, ProcessPerTab) { | 
| +  // Set max renderers to 1 to force running out of processes. | 
| +  RenderProcessHost::SetMaxRendererProcessCount(1); | 
| + | 
| +  CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); | 
| +  parsed_command_line.AppendSwitch(switches::kProcessPerTab); | 
| + | 
| +  int tab_count = 1; | 
| +  int host_count = 1; | 
| + | 
| +  // Change the first tab to be the new tab page (TYPE_DOMUI). | 
| +  GURL newtab(chrome::kChromeUINewTabURL); | 
| +  ui_test_utils::NavigateToURL(browser(), newtab); | 
| +  EXPECT_EQ(tab_count, browser()->tab_count()); | 
| +  EXPECT_EQ(host_count, RenderProcessHostCount()); | 
| + | 
| +  // Create a new TYPE_NORMAL tab.  It should be in its own process. | 
| +  GURL page1("data:text/html,hello world1"); | 
| +  browser()->ShowSingletonTab(page1, false); | 
| +  if (browser()->tab_count() == tab_count) | 
| +    ui_test_utils::WaitForNewTab(browser()); | 
| +  tab_count++; | 
| +  host_count++; | 
| +  EXPECT_EQ(tab_count, browser()->tab_count()); | 
| +  EXPECT_EQ(host_count, RenderProcessHostCount()); | 
| + | 
| +  // Create another TYPE_NORMAL tab.  It should share the previous process. | 
| +  GURL page2("data:text/html,hello world2"); | 
| +  browser()->ShowSingletonTab(page2, false); | 
| +  if (browser()->tab_count() == tab_count) | 
| +    ui_test_utils::WaitForNewTab(browser()); | 
| +  tab_count++; | 
| +  EXPECT_EQ(tab_count, browser()->tab_count()); | 
| +  EXPECT_EQ(host_count, RenderProcessHostCount()); | 
| + | 
| +  // Create another new tab.  It should share the process with the other DOMUI. | 
| +  browser()->NewTab(); | 
| +  if (browser()->tab_count() == tab_count) | 
| +    ui_test_utils::WaitForNewTab(browser()); | 
| +  tab_count++; | 
| +  EXPECT_EQ(tab_count, browser()->tab_count()); | 
| +  EXPECT_EQ(host_count, RenderProcessHostCount()); | 
| + | 
| +  // Create another new tab.  It should share the process with the other DOMUI. | 
| +  browser()->NewTab(); | 
| +  if (browser()->tab_count() == tab_count) | 
| +    ui_test_utils::WaitForNewTab(browser()); | 
| +  tab_count++; | 
| +  EXPECT_EQ(tab_count, browser()->tab_count()); | 
| +  EXPECT_EQ(host_count, RenderProcessHostCount()); | 
| +} | 
| + | 
| // When we hit the max number of renderers, verify that the way we do process | 
| // sharing behaves correctly.  In particular, this test is verifying that even | 
| // when we hit the max process limit, that renderers of each type will wind up | 
|  |