Index: shell/app_child_process_host_unittest.cc |
diff --git a/shell/app_child_process_host_unittest.cc b/shell/app_child_process_host_unittest.cc |
index 9c9f7ecf57e84bb85d820af56a500cc71f4f96c2..f627c24c1368d4c59c0d6a6cc31808a414455955 100644 |
--- a/shell/app_child_process_host_unittest.cc |
+++ b/shell/app_child_process_host_unittest.cc |
@@ -10,6 +10,8 @@ |
#include "base/macros.h" |
#include "base/message_loop/message_loop.h" |
#include "mojo/common/message_pump_mojo.h" |
+#include "mojo/public/c/system/types.h" |
+#include "mojo/public/cpp/system/message_pipe.h" |
#include "shell/context.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -49,8 +51,47 @@ TEST(AppChildProcessHostTest, MAYBE_StartJoin) { |
context.Init(); |
TestAppChildProcessHost app_child_process_host(&context); |
app_child_process_host.Start(); |
- message_loop.Run(); |
+ message_loop.Run(); // This should run until |DidStart()|. |
+ app_child_process_host.ExitNow(123); |
+ int exit_code = app_child_process_host.Join(); |
+ VLOG(2) << "Joined child: exit_code = " << exit_code; |
+ EXPECT_EQ(123, exit_code); |
+ |
+ context.Shutdown(); |
+} |
+ |
+#if defined(OS_ANDROID) |
+// TODO(qsr): Multiprocess shell tests are not supported on android. |
+#define MAYBE_ConnectionError DISABLED_ConnectionError |
+#else |
+#define MAYBE_ConnectionError ConnectionError |
+#endif // defined(OS_ANDROID) |
+// Tests that even on connection error, the callback to |StartApp()| will get |
+// called. |
+TEST(AppChildProcessHostTest, MAYBE_ConnectionError) { |
+ Context context; |
+ base::MessageLoop message_loop( |
+ scoped_ptr<base::MessagePump>(new common::MessagePumpMojo())); |
+ context.Init(); |
+ TestAppChildProcessHost app_child_process_host(&context); |
+ app_child_process_host.Start(); |
+ message_loop.Run(); // This should run until |DidStart()|. |
+ // Send |ExitNow()| first, so that the |StartApp()| below won't actually be |
+ // processed, and we'll just get a connection error. |
app_child_process_host.ExitNow(123); |
+ MessagePipe mp; |
+ InterfaceRequest<Application> application_request; |
+ application_request.Bind(mp.handle0.Pass()); |
+ // This won't actually be called, but the callback should be run. |
+ MojoResult result = MOJO_RESULT_INTERNAL; |
+ app_child_process_host.StartApp( |
+ "/does_not_exist/cbvgyuio", false, application_request.Pass(), |
+ [&result](int32_t r) { |
+ result = r; |
+ base::MessageLoop::current()->QuitWhenIdle(); |
+ }); |
+ message_loop.Run(); |
+ EXPECT_EQ(MOJO_RESULT_UNKNOWN, result); |
int exit_code = app_child_process_host.Join(); |
VLOG(2) << "Joined child: exit_code = " << exit_code; |
EXPECT_EQ(123, exit_code); |