// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "apps/app_keep_alive_service.h" #include "apps/app_keep_alive_service_factory.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/test/base/testing_profile.h" #include "testing/gtest/include/gtest/gtest.h" #if !defined(OS_ANDROID) class AppKeepAliveServiceUnitTest : public testing::Test { protected: virtual void SetUp() OVERRIDE { testing::Test::SetUp(); service_.reset(new apps::AppKeepAliveService(&profile_)); } virtual void TearDown() OVERRIDE { while (chrome::WillKeepAlive()) chrome::EndKeepAlive(); testing::Test::TearDown(); } TestingProfile profile_; scoped_ptr<apps::AppKeepAliveService> service_; }; TEST_F(AppKeepAliveServiceUnitTest, Basic) { ASSERT_FALSE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStop(&profile_, "foo"); EXPECT_FALSE(chrome::WillKeepAlive()); service_->Shutdown(); EXPECT_FALSE(chrome::WillKeepAlive()); } // Test that apps running in different profiles are ignored. TEST_F(AppKeepAliveServiceUnitTest, DifferentProfile) { ASSERT_FALSE(chrome::WillKeepAlive()); service_->OnAppStart(NULL, "foo"); EXPECT_FALSE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStop(NULL, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStop(&profile_, "foo"); EXPECT_FALSE(chrome::WillKeepAlive()); service_->Shutdown(); EXPECT_FALSE(chrome::WillKeepAlive()); } // Test that OnAppStop without a prior corresponding OnAppStart is ignored. TEST_F(AppKeepAliveServiceUnitTest, StopAppBeforeOpening) { ASSERT_FALSE(chrome::WillKeepAlive()); service_->OnAppStop(&profile_, "foo"); ASSERT_FALSE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStop(&profile_, "foo"); EXPECT_FALSE(chrome::WillKeepAlive()); service_->Shutdown(); EXPECT_FALSE(chrome::WillKeepAlive()); } // Test that OnAppStart for an app that has already started is ignored. TEST_F(AppKeepAliveServiceUnitTest, StartMoreThanOnce) { ASSERT_FALSE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStop(&profile_, "foo"); EXPECT_FALSE(chrome::WillKeepAlive()); service_->Shutdown(); EXPECT_FALSE(chrome::WillKeepAlive()); } // Test that OnAppStart is ignored after the service has been shut down. TEST_F(AppKeepAliveServiceUnitTest, StartAfterShutdown) { ASSERT_FALSE(chrome::WillKeepAlive()); service_->Shutdown(); service_->OnAppStart(&profile_, "foo"); EXPECT_FALSE(chrome::WillKeepAlive()); } TEST_F(AppKeepAliveServiceUnitTest, MultipleApps) { ASSERT_FALSE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "bar"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStop(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStop(&profile_, "bar"); EXPECT_FALSE(chrome::WillKeepAlive()); service_->Shutdown(); EXPECT_FALSE(chrome::WillKeepAlive()); } // Test that all keep alives are ended when OnChromeTerminating is called. TEST_F(AppKeepAliveServiceUnitTest, ChromeTerminateWithAppsStarted) { ASSERT_FALSE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "bar"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnChromeTerminating(); EXPECT_FALSE(chrome::WillKeepAlive()); service_->OnAppStop(&profile_, "foo"); service_->OnAppStop(&profile_, "bar"); EXPECT_FALSE(chrome::WillKeepAlive()); service_->Shutdown(); EXPECT_FALSE(chrome::WillKeepAlive()); } // Test that all keep alives are ended when Shutdown is called. TEST_F(AppKeepAliveServiceUnitTest, ProfileShutdownWithAppsStarted) { ASSERT_FALSE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "foo"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->OnAppStart(&profile_, "bar"); EXPECT_TRUE(chrome::WillKeepAlive()); service_->Shutdown(); EXPECT_FALSE(chrome::WillKeepAlive()); } #endif