Index: athena/content/app_activity_unittest.cc |
diff --git a/athena/content/app_activity_unittest.cc b/athena/content/app_activity_unittest.cc |
deleted file mode 100644 |
index 266b940fd4e9ae817b4d98feb64ffd8aec80c50a..0000000000000000000000000000000000000000 |
--- a/athena/content/app_activity_unittest.cc |
+++ /dev/null |
@@ -1,431 +0,0 @@ |
-/// Copyright 2014 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 "athena/activity/public/activity_factory.h" |
-#include "athena/activity/public/activity_manager.h" |
-#include "athena/content/app_activity.h" |
-#include "athena/content/app_activity_registry.h" |
-#include "athena/content/public/app_registry.h" |
-#include "athena/extensions/public/extensions_delegate.h" |
-#include "athena/resource_manager/public/resource_manager.h" |
-#include "athena/test/base/athena_test_base.h" |
-#include "extensions/browser/install/extension_install_ui.h" |
-#include "extensions/common/extension_set.h" |
-#include "ui/aura/window.h" |
-#include "ui/views/view.h" |
-#include "ui/views/widget/widget.h" |
- |
-namespace content { |
-class BrowserContext; |
-} |
- |
-namespace athena { |
-namespace test { |
- |
-namespace { |
- |
-// An identifier for the running apps. |
-const char kDummyApp1[] = "aaaaaaa"; |
-const char kDummyApp2[] = "bbbbbbb"; |
- |
-// A dummy test app activity which works without content / ShellAppWindow. |
-class TestAppActivity : public AppActivity { |
- public: |
- explicit TestAppActivity(const std::string& app_id) |
- : AppActivity(app_id), |
- view_(new views::View()), |
- current_state_(ACTIVITY_VISIBLE) { |
- app_activity_registry_ = |
- AppRegistry::Get()->GetAppActivityRegistry(app_id, nullptr); |
- app_activity_registry_->RegisterAppActivity(this); |
- } |
- ~TestAppActivity() override { |
- app_activity_registry_->UnregisterAppActivity(this); |
- } |
- |
- AppActivityRegistry* app_activity_registry() { |
- return app_activity_registry_; |
- } |
- |
- // Activity: |
- ActivityViewModel* GetActivityViewModel() override { return this; } |
- void SetCurrentState(Activity::ActivityState state) override { |
- current_state_ = state; |
- if (state == ACTIVITY_UNLOADED) |
- app_activity_registry_->Unload(); |
- } |
- ActivityState GetCurrentState() override { return current_state_; } |
- bool IsVisible() override { return true; } |
- ActivityMediaState GetMediaState() override { |
- return Activity::ACTIVITY_MEDIA_STATE_NONE; |
- } |
- aura::Window* GetWindow() override { |
- return view_->GetWidget() ? view_->GetWidget()->GetNativeWindow() : nullptr; |
- } |
- |
- // ActivityViewModel: |
- void Init() override {} |
- SkColor GetRepresentativeColor() const override { return 0; } |
- base::string16 GetTitle() const override { return title_; } |
- bool UsesFrame() const override { return true; } |
- views::View* GetContentsView() override { return view_; } |
- gfx::ImageSkia GetOverviewModeImage() override { return gfx::ImageSkia(); } |
- |
- private: |
- // If known the registry which holds all activities for the associated app. |
- AppActivityRegistry* app_activity_registry_; |
- |
- // The title of the activity. |
- base::string16 title_; |
- |
- // Our view. |
- views::View* view_; |
- |
- // The current state for this activity. |
- ActivityState current_state_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestAppActivity); |
-}; |
- |
-// An AppContentDelegateClass which we can query for call stats. |
-class TestExtensionsDelegate : public ExtensionsDelegate { |
- public: |
- TestExtensionsDelegate() : unload_called_(0), restart_called_(0) {} |
- ~TestExtensionsDelegate() override {} |
- |
- int unload_called() const { return unload_called_; } |
- int restart_called() const { return restart_called_; } |
- |
- // ExtensionsDelegate: |
- content::BrowserContext* GetBrowserContext() const override { |
- return nullptr; |
- } |
- const extensions::ExtensionSet& GetInstalledExtensions() override { |
- return extension_set_; |
- } |
- // Unload an application. Returns true when unloaded. |
- bool UnloadApp(const std::string& app_id) override { |
- unload_called_++; |
- // Since we did not close anything we let the framework clean up. |
- return false; |
- } |
- // Restarts an application. Returns true when the restart was initiated. |
- bool LaunchApp(const std::string& app_id) override { |
- restart_called_++; |
- return true; |
- } |
- scoped_ptr<extensions::ExtensionInstallUI> CreateExtensionInstallUI() |
- override { |
- return scoped_ptr<extensions::ExtensionInstallUI>(); |
- } |
- |
- private: |
- int unload_called_; |
- int restart_called_; |
- |
- extensions::ExtensionSet extension_set_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TestExtensionsDelegate); |
-}; |
- |
-} // namespace |
- |
-// Our testing base. |
-class AppActivityTest : public AthenaTestBase { |
- public: |
- AppActivityTest() : test_extensions_delegate_(nullptr) {} |
- ~AppActivityTest() override {} |
- |
- // AthenaTestBase: |
- void SetUp() override { |
- AthenaTestBase::SetUp(); |
- // Create and install our TestAppContentDelegate with instrumentation. |
- ExtensionsDelegate::Shutdown(); |
- // The instance will be deleted by ExtensionsDelegate::Shutdown(). |
- test_extensions_delegate_ = new TestExtensionsDelegate(); |
- } |
- |
- // A function to create an Activity. |
- TestAppActivity* CreateAppActivity(const std::string& app_id) { |
- TestAppActivity* activity = new TestAppActivity(app_id); |
- ActivityManager::Get()->AddActivity(activity); |
- return activity; |
- } |
- |
- void DeleteActivity(Activity* activity) { |
- Activity::Delete(activity); |
- RunAllPendingInMessageLoop(); |
- } |
- |
- // Get the position of the activity in the navigation history. |
- int GetActivityPosition(Activity* activity) { |
- aura::Window* window = activity->GetActivityViewModel()->GetContentsView() |
- ->GetWidget()->GetNativeWindow(); |
- aura::Window::Windows windows = activity->GetWindow()->parent()->children(); |
- for (size_t i = 0; i < windows.size(); i++) { |
- if (windows[i] == window) |
- return i; |
- } |
- return -1; |
- } |
- |
- // To avoid interference of the ResourceManager in these AppActivity |
- // framework tests, we disable the ResourceManager for some tests. |
- // Every use/interference of this function gets explained. |
- void DisableResourceManager() { |
- ResourceManager::Get()->Pause(true); |
- } |
- |
- protected: |
- TestExtensionsDelegate* test_extensions_delegate() { |
- return test_extensions_delegate_; |
- } |
- |
- private: |
- TestExtensionsDelegate* test_extensions_delegate_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AppActivityTest); |
-}; |
- |
-// Only creates one activity and destroys it. |
-TEST_F(AppActivityTest, OneAppActivity) { |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- { |
- TestAppActivity* app_activity = CreateAppActivity(kDummyApp1); |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(1, app_activity->app_activity_registry()->NumberOfActivities()); |
- EXPECT_EQ(AppRegistry::Get()->GetAppActivityRegistry(kDummyApp1, nullptr), |
- app_activity->app_activity_registry()); |
- DeleteActivity(app_activity); |
- } |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
- EXPECT_EQ(0, test_extensions_delegate()->restart_called()); |
-} |
- |
-// Test running of two applications. |
-TEST_F(AppActivityTest, TwoAppsWithOneActivityEach) { |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- { |
- TestAppActivity* app_activity1 = CreateAppActivity(kDummyApp1); |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(1, app_activity1->app_activity_registry()->NumberOfActivities()); |
- TestAppActivity* app_activity2 = CreateAppActivity(kDummyApp2); |
- EXPECT_EQ(2, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(1, app_activity2->app_activity_registry()->NumberOfActivities()); |
- EXPECT_EQ(1, app_activity1->app_activity_registry()->NumberOfActivities()); |
- DeleteActivity(app_activity1); |
- DeleteActivity(app_activity2); |
- } |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
- EXPECT_EQ(0, test_extensions_delegate()->restart_called()); |
-} |
- |
-// Create and destroy two activities for the same application. |
-TEST_F(AppActivityTest, TwoAppActivities) { |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- { |
- TestAppActivity* app_activity1 = CreateAppActivity(kDummyApp1); |
- TestAppActivity* app_activity2 = CreateAppActivity(kDummyApp1); |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(2, app_activity1->app_activity_registry()->NumberOfActivities()); |
- EXPECT_EQ(app_activity1->app_activity_registry(), |
- app_activity2->app_activity_registry()); |
- DeleteActivity(app_activity1); |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(1, app_activity2->app_activity_registry()->NumberOfActivities()); |
- DeleteActivity(app_activity2); |
- } |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- { |
- TestAppActivity* app_activity1 = CreateAppActivity(kDummyApp1); |
- TestAppActivity* app_activity2 = CreateAppActivity(kDummyApp1); |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(2, app_activity1->app_activity_registry()->NumberOfActivities()); |
- EXPECT_EQ(app_activity1->app_activity_registry(), |
- app_activity2->app_activity_registry()); |
- DeleteActivity(app_activity2); |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(1, app_activity1->app_activity_registry()->NumberOfActivities()); |
- DeleteActivity(app_activity1); |
- } |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
- EXPECT_EQ(0, test_extensions_delegate()->restart_called()); |
-} |
- |
-// Test unload and the creation of the proxy, then "closing the activity". |
-TEST_F(AppActivityTest, TestUnloadFollowedByClose) { |
- // We do not want the ResourceManager to interfere with this test. In this |
- // case it would (dependent on its current internal implementation) |
- // automatically re-load the unloaded activity if it is in an "active" |
- // position. |
- DisableResourceManager(); |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- |
- TestAppActivity* app_activity = CreateAppActivity(kDummyApp1); |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- AppActivityRegistry* app_activity_registry = |
- app_activity->app_activity_registry(); |
- EXPECT_EQ(1, app_activity_registry->NumberOfActivities()); |
- EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity->GetCurrentState()); |
- |
- // Calling Unload now should not do anything since at least one activity in |
- // the registry is still visible. |
- app_activity_registry->Unload(); |
- RunAllPendingInMessageLoop(); |
- EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
- |
- // After setting our activity to unloaded however the application should get |
- // unloaded as requested. |
- app_activity->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
- RunAllPendingInMessageLoop(); |
- EXPECT_EQ(1, test_extensions_delegate()->unload_called()); |
- |
- // Check that our created application is gone, and instead a proxy got |
- // created. |
- ASSERT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- ASSERT_EQ(app_activity_registry, |
- AppRegistry::Get()->GetAppActivityRegistry(kDummyApp1, nullptr)); |
- EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); |
- Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); |
- ASSERT_TRUE(activity_proxy); |
- EXPECT_NE(app_activity, activity_proxy); |
- EXPECT_EQ(Activity::ACTIVITY_UNLOADED, activity_proxy->GetCurrentState()); |
- EXPECT_EQ(0, test_extensions_delegate()->restart_called()); |
- |
- // Close the proxy object and make sure that nothing bad happens. |
- DeleteActivity(activity_proxy); |
- |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(1, test_extensions_delegate()->unload_called()); |
- EXPECT_EQ(0, test_extensions_delegate()->restart_called()); |
-} |
- |
-// Test that when unloading an app while multiple apps / activities are present, |
-// the proxy gets created in the correct location. |
-TEST_F(AppActivityTest, TestUnloadProxyLocation) { |
- // Disable the resource manager since some build bots run this test for an |
- // extended amount of time which allows the MemoryPressureNotifier to fire. |
- DisableResourceManager(); |
- // Set up some activities for some applications. |
- TestAppActivity* app_activity1a = CreateAppActivity(kDummyApp1); |
- TestAppActivity* app_activity2a = CreateAppActivity(kDummyApp2); |
- TestAppActivity* app_activity2b = CreateAppActivity(kDummyApp2); |
- TestAppActivity* app_activity1b = CreateAppActivity(kDummyApp1); |
- EXPECT_EQ(3, GetActivityPosition(app_activity1b)); |
- EXPECT_EQ(2, GetActivityPosition(app_activity2b)); |
- EXPECT_EQ(1, GetActivityPosition(app_activity2a)); |
- EXPECT_EQ(0, GetActivityPosition(app_activity1a)); |
- |
- // Unload an app and make sure that the proxy is in the newest activity slot. |
- AppActivityRegistry* app_activity_registry = |
- app_activity2a->app_activity_registry(); |
- app_activity2a->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
- app_activity2b->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
- RunAllPendingInMessageLoop(); |
- EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); |
- Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); |
- RunAllPendingInMessageLoop(); |
- |
- EXPECT_EQ(2, GetActivityPosition(app_activity1b)); |
- EXPECT_EQ(1, GetActivityPosition(activity_proxy)); |
- EXPECT_EQ(0, GetActivityPosition(app_activity1a)); |
- EXPECT_EQ(0, test_extensions_delegate()->restart_called()); |
- |
- DeleteActivity(activity_proxy); |
- DeleteActivity(app_activity1b); |
- DeleteActivity(app_activity1a); |
-} |
- |
-// Test that an unload with multiple activities of the same app will only unload |
-// when all activities were marked for unloading. |
-TEST_F(AppActivityTest, TestMultipleActivityUnloadLock) { |
- // Disable the resource manager since some build bots run this test for an |
- // extended amount of time which allows the MemoryPressureNotifier to fire. |
- DisableResourceManager(); |
- |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- |
- TestAppActivity* app_activity1 = CreateAppActivity(kDummyApp1); |
- TestAppActivity* app_activity2 = CreateAppActivity(kDummyApp1); |
- TestAppActivity* app_activity3 = CreateAppActivity(kDummyApp1); |
- |
- // Check that we have 3 activities of the same application. |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- AppActivityRegistry* app_activity_registry = |
- app_activity1->app_activity_registry(); |
- EXPECT_EQ(app_activity_registry, app_activity2->app_activity_registry()); |
- EXPECT_EQ(app_activity_registry, app_activity3->app_activity_registry()); |
- EXPECT_EQ(3, app_activity_registry->NumberOfActivities()); |
- EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity1->GetCurrentState()); |
- EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity2->GetCurrentState()); |
- EXPECT_EQ(Activity::ACTIVITY_VISIBLE, app_activity3->GetCurrentState()); |
- |
- // After setting all activities to UNLOADED the application should unload. |
- app_activity1->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
- RunAllPendingInMessageLoop(); |
- EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
- app_activity2->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
- RunAllPendingInMessageLoop(); |
- EXPECT_EQ(0, test_extensions_delegate()->unload_called()); |
- app_activity3->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
- RunAllPendingInMessageLoop(); |
- EXPECT_EQ(1, test_extensions_delegate()->unload_called()); |
- |
- // Now there should only be the proxy activity left. |
- ASSERT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- ASSERT_EQ(app_activity_registry, |
- AppRegistry::Get()->GetAppActivityRegistry(kDummyApp1, nullptr)); |
- EXPECT_EQ(0, app_activity_registry->NumberOfActivities()); |
- Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); |
- ASSERT_TRUE(activity_proxy); |
- EXPECT_NE(app_activity1, activity_proxy); |
- EXPECT_NE(app_activity2, activity_proxy); |
- EXPECT_NE(app_activity3, activity_proxy); |
- EXPECT_EQ(Activity::ACTIVITY_UNLOADED, activity_proxy->GetCurrentState()); |
- |
- // Close the proxy object and make sure that nothing bad happens. |
- DeleteActivity(activity_proxy); |
- |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_EQ(1, test_extensions_delegate()->unload_called()); |
- EXPECT_EQ(0, test_extensions_delegate()->restart_called()); |
-} |
- |
-// Test that activating the proxy will reload the application. |
-TEST_F(AppActivityTest, TestUnloadWithReload) { |
- // We do not want the ResourceManager to interfere with this test. In this |
- // case it would (dependent on its current internal implementation) |
- // automatically re-load the unloaded activity if it is in an "active" |
- // position. |
- DisableResourceManager(); |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
- |
- TestAppActivity* app_activity = CreateAppActivity(kDummyApp1); |
- AppActivityRegistry* app_activity_registry = |
- app_activity->app_activity_registry(); |
- |
- // Unload the activity. |
- app_activity->SetCurrentState(Activity::ACTIVITY_UNLOADED); |
- RunAllPendingInMessageLoop(); |
- EXPECT_EQ(1, test_extensions_delegate()->unload_called()); |
- |
- // Try to activate the activity again. This will force the application to |
- // reload. |
- Activity* activity_proxy = app_activity_registry->unloaded_activity_proxy(); |
- activity_proxy->SetCurrentState(Activity::ACTIVITY_VISIBLE); |
- EXPECT_EQ(1, test_extensions_delegate()->restart_called()); |
- |
- // However - the restart in this test framework does not really restart and |
- // all objects should be still there.. |
- EXPECT_EQ(1, AppRegistry::Get()->NumberOfApplications()); |
- EXPECT_TRUE(app_activity_registry->unloaded_activity_proxy()); |
- Activity::Delete(app_activity_registry->unloaded_activity_proxy()); |
- EXPECT_EQ(0, AppRegistry::Get()->NumberOfApplications()); |
-} |
- |
-} // namespace test |
-} // namespace athena |