summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authormnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-28 17:37:40 +0000
committermnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-28 17:37:40 +0000
commit2fba276d4c3f693b87e0df88e6ea0f8dcb1a5e8e (patch)
tree97ad4f0668202c1920a1af430be3b7e2f9d6fa56 /chrome
parent7ed3d5740a86bf878b94d4c3bf8d9220a0d903d2 (diff)
downloadchromium_src-2fba276d4c3f693b87e0df88e6ea0f8dcb1a5e8e.zip
chromium_src-2fba276d4c3f693b87e0df88e6ea0f8dcb1a5e8e.tar.gz
chromium_src-2fba276d4c3f693b87e0df88e6ea0f8dcb1a5e8e.tar.bz2
Simple fix to make sure that DevTools run in a separate process in 'process-per-tab' mode.
BUG=69873 TEST=none Review URL: http://codereview.chromium.org/6335017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72969 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/browsing_instance.cc4
-rw-r--r--chrome/browser/renderer_host/test/render_process_host_browsertest.cc97
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc5
3 files changed, 100 insertions, 6 deletions
diff --git a/chrome/browser/browsing_instance.cc b/chrome/browser/browsing_instance.cc
index 72c121b..4266e8c 100644
--- a/chrome/browser/browsing_instance.cc
+++ b/chrome/browser/browsing_instance.cc
@@ -38,7 +38,9 @@ bool BrowsingInstance::ShouldUseProcessPerSite(const GURL& url) {
if (url.SchemeIs(chrome::kExtensionScheme))
return true;
- if (DOMUIFactory::UseDOMUIForURL(profile_, url))
+ // DevTools pages have DOMUI type but should not reuse the same host.
+ if (DOMUIFactory::UseDOMUIForURL(profile_, url) &&
+ !url.SchemeIs(chrome::kChromeDevToolsScheme))
return true;
// In all other cases, don't use process-per-site logic.
diff --git a/chrome/browser/renderer_host/test/render_process_host_browsertest.cc b/chrome/browser/renderer_host/test/render_process_host_browsertest.cc
index 46a960c..04a7c5f 100644
--- a/chrome/browser/renderer_host/test/render_process_host_browsertest.cc
+++ b/chrome/browser/renderer_host/test/render_process_host_browsertest.cc
@@ -3,10 +3,14 @@
// found in the LICENSE file.
#include "base/command_line.h"
+#include "chrome/browser/debugger/devtools_manager.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/renderer_host/render_view_host.h"
+#include "chrome/browser/renderer_host/render_widget_host.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/url_constants.h"
#include "chrome/test/in_process_browser_test.h"
@@ -28,6 +32,32 @@ class RenderProcessHostTest : public InProcessBrowserTest {
}
return count;
}
+
+ 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;
+ }
};
IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, ProcessPerTab) {
@@ -82,6 +112,73 @@ IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, ProcessPerTab) {
EXPECT_EQ(host_count, RenderProcessHostCount());
}
+// 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;
+
+ 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());
+
+ // 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;
+
+ 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());
+
+ // 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());
+}
+
// 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
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index 508d8fe..0339888 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -1432,11 +1432,6 @@ bool RenderViewContextMenu::IsDevCommandEnabled(int id) const {
if (!profile_->GetPrefs()->GetBoolean(prefs::kWebKitJavascriptEnabled) ||
command_line.HasSwitch(switches::kDisableJavaScript))
return false;
- // Don't enable the web inspector on web inspector if there is no process
- // per tab flag set.
- if (IsDevToolsURL(active_entry->url()) &&
- !command_line.HasSwitch(switches::kProcessPerTab))
- return false;
// Don't enable the web inspector if the developer tools are disabled via
// the preference dev-tools-disabled.
if (profile_->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled))