| Index: chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
|
| diff --git a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
|
| index a28a1b8ce4d81d577258b48089d866d4152862a2..b9eb67b2ded8f42ae65d7e2f99e7c14e12cc2865 100644
|
| --- a/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
|
| +++ b/chrome/browser/chromeos/lock_screen_apps/state_controller_unittest.cc
|
| @@ -15,6 +15,7 @@
|
| #include "base/test/scoped_command_line.h"
|
| #include "chrome/browser/chromeos/lock_screen_apps/app_manager.h"
|
| #include "chrome/browser/chromeos/lock_screen_apps/state_observer.h"
|
| +#include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/extensions/test_extension_system.h"
|
| #include "chrome/browser/ui/apps/chrome_app_delegate.h"
|
| @@ -328,34 +329,32 @@ class LockScreenAppStateTest : public BrowserWithTestWindowTest {
|
|
|
| ASSERT_TRUE(lock_screen_apps::StateController::IsEnabled());
|
|
|
| + // Create fake lock screen app profile.
|
| + lock_screen_profile_ = profile_manager_.CreateTestingProfile(
|
| + chromeos::ProfileHelper::GetLockScreenAppProfileName());
|
| +
|
| + InitExtensionSystem(profile());
|
| + InitExtensionSystem(lock_screen_profile());
|
| +
|
| + std::unique_ptr<TestAppManager> app_manager =
|
| + base::MakeUnique<TestAppManager>(
|
| + &profile_, lock_screen_profile_->GetOriginalProfile());
|
| + app_manager_ = app_manager.get();
|
| +
|
| state_controller_ = base::MakeUnique<lock_screen_apps::StateController>();
|
| state_controller_->SetTrayActionPtrForTesting(
|
| tray_action_.CreateInterfacePtrAndBind());
|
| + state_controller_->SetAppManagerForTesting(std::move(app_manager));
|
| + state_controller_->SetReadyCallbackForTesting(ready_waiter_.QuitClosure());
|
| state_controller_->Initialize();
|
| state_controller_->FlushTrayActionForTesting();
|
|
|
| state_controller_->AddObserver(&observer_);
|
| -
|
| - // Create fake sign-in profile.
|
| - TestingProfile::Builder builder;
|
| - builder.SetPath(
|
| - profile_manager_.profiles_dir().AppendASCII(chrome::kInitialProfile));
|
| - signin_profile_ = builder.BuildIncognito(
|
| - profile_manager_.CreateTestingProfile(chrome::kInitialProfile));
|
| -
|
| - InitExtensionSystem(profile());
|
| - InitExtensionSystem(signin_profile());
|
| -
|
| - std::unique_ptr<TestAppManager> app_manager =
|
| - base::MakeUnique<TestAppManager>(&profile_,
|
| - signin_profile_->GetOriginalProfile());
|
| - app_manager_ = app_manager.get();
|
| - state_controller_->SetAppManagerForTesting(std::move(app_manager));
|
| }
|
|
|
| void TearDown() override {
|
| extensions::ExtensionSystem::Get(profile())->Shutdown();
|
| - extensions::ExtensionSystem::Get(signin_profile())->Shutdown();
|
| + extensions::ExtensionSystem::Get(lock_screen_profile())->Shutdown();
|
|
|
| state_controller_->RemoveObserver(&observer_);
|
| state_controller_.reset();
|
| @@ -402,17 +401,22 @@ class LockScreenAppStateTest : public BrowserWithTestWindowTest {
|
| tray_action_.ClearObservedStates();
|
| }
|
|
|
| + void SetPrimaryProfileAndWaitUnitlReady() {
|
| + state_controller_->SetPrimaryProfile(&profile_);
|
| + ready_waiter_.Run();
|
| + }
|
| +
|
| // Helper method to move state controller to the specified state.
|
| // Should be called at the begining of tests, at most once.
|
| bool InitializeNoteTakingApp(TrayActionState target_state,
|
| bool enable_app_launch) {
|
| app_ = CreateTestNoteTakingApp(kTestAppId);
|
| - extensions::ExtensionSystem::Get(signin_profile())
|
| + extensions::ExtensionSystem::Get(lock_screen_profile())
|
| ->extension_service()
|
| ->AddExtension(app_.get());
|
|
|
| app_manager_->SetInitialAppState(kTestAppId, enable_app_launch);
|
| - state_controller_->SetPrimaryProfile(&profile_);
|
| + SetPrimaryProfileAndWaitUnitlReady();
|
|
|
| if (target_state == TrayActionState::kNotAvailable)
|
| return true;
|
| @@ -446,7 +450,7 @@ class LockScreenAppStateTest : public BrowserWithTestWindowTest {
|
| if (target_state == TrayActionState::kLaunching)
|
| return true;
|
|
|
| - app_window_ = CreateNoteTakingWindow(signin_profile(), app());
|
| + app_window_ = CreateNoteTakingWindow(lock_screen_profile(), app());
|
| if (!app_window_->window()) {
|
| ADD_FAILURE() << "Not allowed to create app window.";
|
| return false;
|
| @@ -461,7 +465,7 @@ class LockScreenAppStateTest : public BrowserWithTestWindowTest {
|
| }
|
|
|
| TestingProfile* profile() { return &profile_; }
|
| - TestingProfile* signin_profile() { return signin_profile_; }
|
| + TestingProfile* lock_screen_profile() { return lock_screen_profile_; }
|
|
|
| session_manager::SessionManager* session_manager() {
|
| return session_manager_.get();
|
| @@ -484,7 +488,16 @@ class LockScreenAppStateTest : public BrowserWithTestWindowTest {
|
| std::unique_ptr<base::test::ScopedCommandLine> command_line_;
|
| TestingProfileManager profile_manager_;
|
| TestingProfile profile_;
|
| - TestingProfile* signin_profile_ = nullptr;
|
| + TestingProfile* lock_screen_profile_ = nullptr;
|
| +
|
| + // Run loop used to throttle test until async state controller initialization
|
| + // is fully complete. The quit closure for this run loop will be passed to
|
| + // |state_controller_| as the callback to be run when the state controller is
|
| + // ready for action.
|
| + // NOTE: Tests should call |state_controller_->SetPrimaryProfile(Profile*)|
|
| + // before running the loop, as that is the method that starts the state
|
| + // controller.
|
| + base::RunLoop ready_waiter_;
|
|
|
| std::unique_ptr<session_manager::SessionManager> session_manager_;
|
|
|
| @@ -522,7 +535,7 @@ TEST_F(LockScreenAppStateTest, InitialState) {
|
|
|
| TEST_F(LockScreenAppStateTest, SetPrimaryProfile) {
|
| EXPECT_EQ(TestAppManager::State::kNotInitialized, app_manager()->state());
|
| - state_controller()->SetPrimaryProfile(profile());
|
| + SetPrimaryProfileAndWaitUnitlReady();
|
|
|
| EXPECT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
| EXPECT_EQ(TrayActionState::kNotAvailable,
|
| @@ -538,7 +551,7 @@ TEST_F(LockScreenAppStateTest, SetPrimaryProfileWhenSessionLocked) {
|
| EXPECT_EQ(TestAppManager::State::kNotInitialized, app_manager()->state());
|
|
|
| app_manager()->SetInitialAppState(kTestAppId, true);
|
| - state_controller()->SetPrimaryProfile(profile());
|
| + SetPrimaryProfileAndWaitUnitlReady();
|
|
|
| ASSERT_EQ(TestAppManager::State::kStarted, app_manager()->state());
|
|
|
| @@ -550,7 +563,7 @@ TEST_F(LockScreenAppStateTest, SetPrimaryProfileWhenSessionLocked) {
|
|
|
| TEST_F(LockScreenAppStateTest, SessionLock) {
|
| app_manager()->SetInitialAppState(kTestAppId, true);
|
| - state_controller()->SetPrimaryProfile(profile());
|
| + SetPrimaryProfileAndWaitUnitlReady();
|
| ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
|
|
| session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| @@ -584,7 +597,7 @@ TEST_F(LockScreenAppStateTest, SessionLock) {
|
| }
|
|
|
| TEST_F(LockScreenAppStateTest, SessionUnlockedWhileStartingAppManager) {
|
| - state_controller()->SetPrimaryProfile(profile());
|
| + SetPrimaryProfileAndWaitUnitlReady();
|
| ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
|
|
| session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| @@ -612,7 +625,7 @@ TEST_F(LockScreenAppStateTest, SessionUnlockedWhileStartingAppManager) {
|
| }
|
|
|
| TEST_F(LockScreenAppStateTest, AppManagerNoApp) {
|
| - state_controller()->SetPrimaryProfile(profile());
|
| + SetPrimaryProfileAndWaitUnitlReady();
|
| ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
|
|
| session_manager()->SetSessionState(session_manager::SessionState::LOCKED);
|
| @@ -646,7 +659,7 @@ TEST_F(LockScreenAppStateTest, AppManagerNoApp) {
|
| }
|
|
|
| TEST_F(LockScreenAppStateTest, AppAvailabilityChanges) {
|
| - state_controller()->SetPrimaryProfile(profile());
|
| + SetPrimaryProfileAndWaitUnitlReady();
|
| ASSERT_EQ(TestAppManager::State::kStopped, app_manager()->state());
|
|
|
| app_manager()->SetInitialAppState(kTestAppId, false);
|
| @@ -784,7 +797,7 @@ TEST_F(LockScreenAppStateTest, AppWindowRegistration) {
|
| true /* enable_app_launch */));
|
|
|
| std::unique_ptr<TestAppWindow> app_window =
|
| - CreateNoteTakingWindow(signin_profile(), app());
|
| + CreateNoteTakingWindow(lock_screen_profile(), app());
|
| EXPECT_FALSE(app_window->window());
|
|
|
| tray_action()->SendNewNoteRequest();
|
| @@ -800,10 +813,11 @@ TEST_F(LockScreenAppStateTest, AppWindowRegistration) {
|
| EXPECT_FALSE(non_eligible_app_window->window());
|
|
|
| EXPECT_FALSE(state_controller()->CreateAppWindowForLockScreenAction(
|
| - signin_profile(), app(), extensions::api::app_runtime::ACTION_TYPE_NONE,
|
| + lock_screen_profile(), app(),
|
| + extensions::api::app_runtime::ACTION_TYPE_NONE,
|
| base::MakeUnique<ChromeAppDelegate>(true)));
|
|
|
| - app_window = CreateNoteTakingWindow(signin_profile(), app());
|
| + app_window = CreateNoteTakingWindow(lock_screen_profile(), app());
|
| ASSERT_TRUE(app_window->window());
|
|
|
| app_window->Initialize(true /* shown */);
|
| @@ -812,7 +826,7 @@ TEST_F(LockScreenAppStateTest, AppWindowRegistration) {
|
|
|
| // Test that second app window cannot be registered.
|
| std::unique_ptr<TestAppWindow> second_app_window =
|
| - CreateNoteTakingWindow(signin_profile(), app());
|
| + CreateNoteTakingWindow(lock_screen_profile(), app());
|
| EXPECT_FALSE(second_app_window->window());
|
|
|
| // Test the app window does not get closed by itself.
|
| @@ -837,7 +851,7 @@ TEST_F(LockScreenAppStateTest, AppWindowClosedBeforeBeingShown) {
|
| true /* enable_app_launch */));
|
|
|
| std::unique_ptr<TestAppWindow> app_window =
|
| - CreateNoteTakingWindow(signin_profile(), app());
|
| + CreateNoteTakingWindow(lock_screen_profile(), app());
|
| ASSERT_TRUE(app_window->window());
|
| app_window->Initialize(false /* shown */);
|
|
|
| @@ -862,7 +876,7 @@ TEST_F(LockScreenAppStateTest, AppWindowClosedOnAppUnload) {
|
| ASSERT_TRUE(InitializeNoteTakingApp(TrayActionState::kActive,
|
| true /* enable_app_launch */));
|
|
|
| - extensions::ExtensionSystem::Get(signin_profile())
|
| + extensions::ExtensionSystem::Get(lock_screen_profile())
|
| ->extension_service()
|
| ->UnloadExtension(app()->id(),
|
| extensions::UnloadedExtensionReason::UNINSTALL);
|
| @@ -881,7 +895,7 @@ TEST_F(LockScreenAppStateTest, AppWindowClosedOnNoteTakingAppChange) {
|
|
|
| scoped_refptr<extensions::Extension> secondary_app =
|
| CreateTestNoteTakingApp(kSecondaryTestAppId);
|
| - extensions::ExtensionSystem::Get(signin_profile())
|
| + extensions::ExtensionSystem::Get(lock_screen_profile())
|
| ->extension_service()
|
| ->AddExtension(secondary_app.get());
|
|
|
| @@ -897,13 +911,13 @@ TEST_F(LockScreenAppStateTest, AppWindowClosedOnNoteTakingAppChange) {
|
| state_controller()->FlushTrayActionForTesting();
|
|
|
| std::unique_ptr<TestAppWindow> app_window =
|
| - CreateNoteTakingWindow(signin_profile(), app());
|
| + CreateNoteTakingWindow(lock_screen_profile(), app());
|
| EXPECT_FALSE(app_window->window());
|
| ASSERT_EQ(TrayActionState::kLaunching,
|
| state_controller()->GetLockScreenNoteState());
|
|
|
| std::unique_ptr<TestAppWindow> secondary_app_window =
|
| - CreateNoteTakingWindow(signin_profile(), secondary_app.get());
|
| + CreateNoteTakingWindow(lock_screen_profile(), secondary_app.get());
|
| ASSERT_TRUE(secondary_app_window->window());
|
|
|
| secondary_app_window->Initialize(true /* shown*/);
|
| @@ -914,7 +928,7 @@ TEST_F(LockScreenAppStateTest, AppWindowClosedOnNoteTakingAppChange) {
|
| EXPECT_FALSE(secondary_app_window->closed());
|
|
|
| // Uninstall the app and test the secondary app window is closed.
|
| - extensions::ExtensionSystem::Get(signin_profile())
|
| + extensions::ExtensionSystem::Get(lock_screen_profile())
|
| ->extension_service()
|
| ->UnloadExtension(secondary_app->id(),
|
| extensions::UnloadedExtensionReason::UNINSTALL);
|
|
|