Index: chrome/browser/renderer_host/browser_render_process_host.cc |
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc |
index 33ef770a316b18a68ccd80762e3c8a71c6a80fa6..3e3081a1aa64f9ec75d261c9b6a64c5afac30419 100644 |
--- a/chrome/browser/renderer_host/browser_render_process_host.cc |
+++ b/chrome/browser/renderer_host/browser_render_process_host.cc |
@@ -284,6 +284,13 @@ bool BrowserRenderProcessHost::Init() { |
DebugFlags::ProcessDebugFlags(&cmd_line, |
DebugFlags::RENDERER, |
in_sandbox); |
+#elif defined(OS_POSIX) |
+ if (browser_command_line.HasSwitch(switches::kRendererCmdPrefix)) { |
+ // launch the renderer child with some prefix (usually "gdb --args") |
+ const std::wstring prefix = |
+ browser_command_line.GetSwitchValue(switches::kRendererCmdPrefix); |
+ cmd_line.PrependWrapper(prefix); |
+ } |
#endif |
cmd_line.AppendSwitchWithValue(switches::kProcessType, |
@@ -644,7 +651,15 @@ void BrowserRenderProcessHost::OnChannelConnected(int32 peer_pid) { |
} else { |
// Need to verify that the peer_pid is actually the process we know, if |
// it is not, we need to panic now. See bug 1002150. |
- CHECK(peer_pid == process_.pid()); |
+ if (peer_pid != process_.pid()) { |
+ // In the case that we are running the renderer in a wrapper, this check |
+ // is invalid as it's the wrapper PID that we'll have, not the actual |
+ // renderer |
+ const CommandLine& cmd_line = *CommandLine::ForCurrentProcess(); |
+ if (cmd_line.HasSwitch(switches::kRendererCmdPrefix)) |
+ return; |
+ CHECK(peer_pid == process_.pid()); |
+ } |
} |
} |