Index: chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc |
diff --git a/chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc b/chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..31295f673a0d8c78b814ffdbfbe521563d5ba899 |
--- /dev/null |
+++ b/chrome/browser/renderer_host/render_process_host_chrome_browsertest.cc |
@@ -0,0 +1,120 @@ |
+// Copyright (c) 2011 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 "content/browser/renderer_host/render_process_host_browsertest.h" |
+ |
+#include "base/command_line.h" |
+#include "chrome/browser/debugger/devtools_manager.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/common/chrome_switches.h" |
+#include "chrome/common/url_constants.h" |
+#include "chrome/test/ui_test_utils.h" |
+#include "content/browser/renderer_host/render_process_host.h" |
+#include "content/browser/renderer_host/render_view_host.h" |
+#include "content/browser/renderer_host/render_view_host_delegate.h" |
+ |
+namespace { |
+ |
+RenderViewHost* FindFirstDevToolsHost() { |
+ RenderProcessHost::iterator hosts = RenderProcessHost::AllHostsIterator(); |
+ for (; !hosts.IsAtEnd(); hosts.Advance()) { |
+ RenderProcessHost* render_process_host = hosts.GetCurrentValue(); |
+ DCHECK(render_process_host); |
+ if (!render_process_host->HasConnection()) |
+ continue; |
+ RenderProcessHost::listeners_iterator iter( |
+ render_process_host->ListenersIterator()); |
+ for (; !iter.IsAtEnd(); iter.Advance()) { |
+ const RenderWidgetHost* widget = |
+ static_cast<const RenderWidgetHost*>(iter.GetCurrentValue()); |
+ DCHECK(widget); |
+ if (!widget || !widget->IsRenderView()) |
+ continue; |
+ RenderViewHost* host = const_cast<RenderViewHost*>( |
+ static_cast<const RenderViewHost*>(widget)); |
+ RenderViewHostDelegate* host_delegate = host->delegate(); |
+ GURL url = host_delegate->GetURL(); |
+ if (url.SchemeIs(chrome::kChromeDevToolsScheme)) |
+ return host; |
+ } |
+ } |
+ return NULL; |
+} |
+ |
+} // namespace |
+ |
+// Ensure that DevTools opened to debug DevTools is launched in a separate |
+// process when --process-per-tab is set. See crbug.com/69873. |
+IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, DevToolsOnSelfInOwnProcessPPT) { |
+ CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess(); |
+ parsed_command_line.AppendSwitch(switches::kProcessPerTab); |
+ |
+ int tab_count = 1; |
+ int host_count = 1; |
+ |
+#if defined(TOUCH_UI) |
+ ++host_count; // For the touch keyboard. |
+#endif |
+ |
+ GURL page1("data:text/html,hello world1"); |
+ browser()->ShowSingletonTab(page1); |
+ 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()); |
+ |
+ // DevTools start in docked mode (no new tab), in a separate process. |
+ browser()->ToggleDevToolsWindow(DEVTOOLS_TOGGLE_ACTION_INSPECT); |
+ host_count++; |
+ EXPECT_EQ(tab_count, browser()->tab_count()); |
+ EXPECT_EQ(host_count, RenderProcessHostCount()); |
+ |
+ RenderViewHost* devtools = FindFirstDevToolsHost(); |
+ DCHECK(devtools); |
+ |
+ // DevTools start in a separate process. |
+ DevToolsManager::GetInstance()->ToggleDevToolsWindow( |
+ devtools, DEVTOOLS_TOGGLE_ACTION_INSPECT); |
+ host_count++; |
+ EXPECT_EQ(tab_count, browser()->tab_count()); |
+ EXPECT_EQ(host_count, RenderProcessHostCount()); |
+} |
+ |
+// Ensure that DevTools opened to debug DevTools is launched in a separate |
+// process. See crbug.com/69873. |
+IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, DevToolsOnSelfInOwnProcess) { |
+ int tab_count = 1; |
+ int host_count = 1; |
+ |
+#if defined(TOUCH_UI) |
+ ++host_count; // For the touch keyboard. |
+#endif |
+ |
+ GURL page1("data:text/html,hello world1"); |
+ browser()->ShowSingletonTab(page1); |
+ 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()); |
+ |
+ // DevTools start in docked mode (no new tab), in a separate process. |
+ browser()->ToggleDevToolsWindow(DEVTOOLS_TOGGLE_ACTION_INSPECT); |
+ host_count++; |
+ EXPECT_EQ(tab_count, browser()->tab_count()); |
+ EXPECT_EQ(host_count, RenderProcessHostCount()); |
+ |
+ RenderViewHost* devtools = FindFirstDevToolsHost(); |
+ DCHECK(devtools); |
+ |
+ // DevTools start in a separate process. |
+ DevToolsManager::GetInstance()->ToggleDevToolsWindow( |
+ devtools, DEVTOOLS_TOGGLE_ACTION_INSPECT); |
+ host_count++; |
+ EXPECT_EQ(tab_count, browser()->tab_count()); |
+ EXPECT_EQ(host_count, RenderProcessHostCount()); |
+} |