| 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
|
|
|