Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(750)

Unified Diff: services/service_manager/background/tests/background_service_manager_unittest.cc

Issue 2646033002: mash: Exit the root process if the window manager service crashes (Closed)
Patch Set: review comments Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: services/service_manager/background/tests/background_service_manager_unittest.cc
diff --git a/services/service_manager/background/tests/background_service_manager_unittest.cc b/services/service_manager/background/tests/background_service_manager_unittest.cc
index f315cd2909968d888080e641547645b838d8f812..02c4df9dfe2322625158ffff978bb94e4e4d28e8 100644
--- a/services/service_manager/background/tests/background_service_manager_unittest.cc
+++ b/services/service_manager/background/tests/background_service_manager_unittest.cc
@@ -20,6 +20,7 @@ namespace {
const char kTestName[] = "background_service_manager_unittest";
const char kAppName[] = "background_service_manager_test_service";
+// The parent unit test suite service, not the underlying test service.
class ServiceImpl : public Service {
public:
ServiceImpl() {}
@@ -40,8 +41,6 @@ void SetFlagAndRunClosure(bool* flag, const base::Closure& closure) {
closure.Run();
}
-} // namespace
-
// Uses BackgroundServiceManager to start the service manager in the background
// and connects to background_service_manager_test_service, verifying we can
// send a message to the service.
@@ -71,4 +70,41 @@ TEST(BackgroundServiceManagerTest, MAYBE_Basic) {
EXPECT_TRUE(got_result);
}
+// The out param cannot be last due to base::Bind() currying.
+void QuitCallback(bool* callback_called,
+ const base::Closure& quit_closure,
+ const Identity& identity) {
+ EXPECT_EQ(kAppName, identity.name());
+ *callback_called = true;
+ quit_closure.Run();
+}
+
+// Verifies that quitting a service invokes the quit callback.
+TEST(BackgroundServiceManagerTest, SetInstanceQuitCallback) {
+ BackgroundServiceManager background_service_manager(nullptr, nullptr);
+ base::MessageLoop message_loop;
+ mojom::ServicePtr service;
+ ServiceContext service_context(base::MakeUnique<ServiceImpl>(),
+ mojom::ServiceRequest(&service));
+ background_service_manager.RegisterService(
+ Identity(kTestName, mojom::kRootUserID), std::move(service), nullptr);
+
+ mojom::TestServicePtr test_service;
+ service_context.connector()->BindInterface(kAppName, &test_service);
+
+ // Set a callback for when the service quits that will quit |run_loop|.
+ base::RunLoop run_loop;
+ bool callback_called = false;
+ background_service_manager.SetInstanceQuitCallback(
+ base::Bind(&QuitCallback, &callback_called, run_loop.QuitClosure()));
+
+ // Ask the service to quit itself.
+ test_service->Quit();
+ run_loop.Run();
+
+ // The run loop was quit by the callback and not by something else.
+ EXPECT_TRUE(callback_called);
+}
+
+} // namespace
} // namespace service_manager
« no previous file with comments | « services/service_manager/background/tests/OWNERS ('k') | services/service_manager/background/tests/test.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698