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