Chromium Code Reviews| Index: content/browser/renderer_host/render_process_host_browsertest.cc |
| diff --git a/content/browser/renderer_host/render_process_host_browsertest.cc b/content/browser/renderer_host/render_process_host_browsertest.cc |
| index e0c4d27a236fe76f5a6c2982879bbd4ddcf733f4..301e3b4d9a3d6e6788b71e3666ed0bd7267f8f34 100644 |
| --- a/content/browser/renderer_host/render_process_host_browsertest.cc |
| +++ b/content/browser/renderer_host/render_process_host_browsertest.cc |
| @@ -3,6 +3,7 @@ |
| // found in the LICENSE file. |
| #include "base/command_line.h" |
| +#include "base/run_loop.h" |
| #include "build/build_config.h" |
| #include "content/browser/renderer_host/render_process_host_impl.h" |
| #include "content/common/child_process_messages.h" |
| @@ -11,9 +12,11 @@ |
| #include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/content_switches.h" |
| +#include "content/public/common/service_registry.h" |
| #include "content/public/common/url_constants.h" |
| #include "content/public/test/content_browser_test.h" |
| #include "content/public/test/content_browser_test_utils.h" |
| +#include "content/public/test/test_mojo_service.mojom.h" |
| #include "content/shell/browser/shell.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| @@ -42,11 +45,17 @@ class RenderProcessHostTest : public ContentBrowserTest, |
| RenderProcessHostTest() : process_exits_(0), host_destructions_(0) {} |
| protected: |
| + void set_process_exit_callback(const base::Closure& callback) { |
| + process_exit_callback_ = callback; |
| + } |
| + |
| // RenderProcessHostObserver: |
| void RenderProcessExited(RenderProcessHost* host, |
| base::TerminationStatus status, |
| int exit_code) override { |
| ++process_exits_; |
| + if (!process_exit_callback_.is_null()) |
| + process_exit_callback_.Run(); |
| } |
| void RenderProcessHostDestroyed(RenderProcessHost* host) override { |
| ++host_destructions_; |
| @@ -54,6 +63,7 @@ class RenderProcessHostTest : public ContentBrowserTest, |
| int process_exits_; |
| int host_destructions_; |
| + base::Closure process_exit_callback_; |
| }; |
| // Sometimes the renderer process's ShutdownRequest (corresponding to the |
| @@ -198,5 +208,35 @@ IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, |
| } |
| } |
| +IN_PROC_BROWSER_TEST_F(RenderProcessHostTest, KillProcessOnBadMojoMessage) { |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + |
| + GURL test_url = embedded_test_server()->GetURL("/simple_page.html"); |
| + NavigateToURL(shell(), test_url); |
| + RenderProcessHost* rph = |
| + shell()->web_contents()->GetRenderViewHost()->GetProcess(); |
| + |
| + host_destructions_ = 0; |
| + process_exits_ = 0; |
| + rph->AddObserver(this); |
| + |
| + mojom::TestMojoServicePtr service; |
| + rph->GetServiceRegistry()->ConnectToRemoteService(mojo::GetProxy(&service)); |
| + |
| + base::RunLoop run_loop; |
| + set_process_exit_callback(run_loop.QuitClosure()); |
| + |
| + // Should reply with a bad message and cause process death. |
| + service->DoSomething([]{}); |
| + |
| + run_loop.Run(); |
| + |
| + EXPECT_EQ(1, process_exits_); |
| + EXPECT_EQ(0, host_destructions_); |
| + if (!host_destructions_) |
| + rph->RemoveObserver(this); |
| +} |
| + |
| + |
|
jam
2016/06/13 18:30:39
nit: extra line
Ken Rockot(use gerrit already)
2016/06/13 22:36:40
done
|
| } // namespace |
| } // namespace content |