| Index: chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc
|
| diff --git a/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc b/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ea9a25f0889c65fd2bd67505a0edea884ce763ba
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/login/session/chrome_session_manager_browsertest.cc
|
| @@ -0,0 +1,161 @@
|
| +// Copyright 2016 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 "chrome/browser/chromeos/login/session/chrome_session_manager.h"
|
| +
|
| +#include <memory>
|
| +
|
| +#include "base/command_line.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/run_loop.h"
|
| +#include "chrome/browser/chrome_notification_types.h"
|
| +#include "chrome/browser/chromeos/login/existing_user_controller.h"
|
| +#include "chrome/browser/chromeos/login/login_manager_test.h"
|
| +#include "chrome/browser/chromeos/login/startup_utils.h"
|
| +#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h"
|
| +#include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
|
| +#include "chrome/browser/chromeos/login/ui/webui_login_display.h"
|
| +#include "chrome/browser/chromeos/login/wizard_controller.h"
|
| +#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
|
| +#include "chromeos/chromeos_switches.h"
|
| +#include "content/public/test/test_utils.h"
|
| +#include "google_apis/gaia/fake_gaia.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +namespace {
|
| +
|
| +const char* const kTestUsers[] = {"test-user1@consumer.example.com",
|
| + "test-user2@consumer.example.com",
|
| + "test-user3@consumer.example.com"};
|
| +
|
| +// Helper class to wait for user adding screen to finish.
|
| +class UserAddingScreenWaiter : public UserAddingScreen::Observer {
|
| + public:
|
| + UserAddingScreenWaiter() { UserAddingScreen::Get()->AddObserver(this); }
|
| + ~UserAddingScreenWaiter() override {
|
| + UserAddingScreen::Get()->RemoveObserver(this);
|
| + }
|
| +
|
| + void Wait() {
|
| + if (!UserAddingScreen::Get()->IsRunning())
|
| + return;
|
| + run_loop_ = base::MakeUnique<base::RunLoop>();
|
| + run_loop_->Run();
|
| + }
|
| +
|
| + // UserAddingScreen::Observer:
|
| + void OnUserAddingFinished() override {
|
| + if (run_loop_)
|
| + run_loop_->Quit();
|
| + }
|
| +
|
| + private:
|
| + std::unique_ptr<base::RunLoop> run_loop_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(UserAddingScreenWaiter);
|
| +};
|
| +
|
| +} // anonymous namespace
|
| +
|
| +class ChromeSessionManagerTest : public LoginManagerTest {
|
| + public:
|
| + ChromeSessionManagerTest() : LoginManagerTest(true) {}
|
| + ~ChromeSessionManagerTest() override {}
|
| +
|
| + // LoginManagerTest:
|
| + void SetUpCommandLine(base::CommandLine* command_line) override {
|
| + LoginManagerTest::SetUpCommandLine(command_line);
|
| +
|
| + command_line->AppendSwitch(switches::kOobeSkipPostLogin);
|
| + }
|
| +
|
| + void StartSignInScreen() {
|
| + WizardController* wizard_controller =
|
| + WizardController::default_controller();
|
| + ASSERT_TRUE(wizard_controller);
|
| + wizard_controller->SkipToLoginForTesting(LoginScreenContext());
|
| + OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait();
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(ChromeSessionManagerTest);
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChromeSessionManagerTest, OobeNewUser) {
|
| + // Verify that session state is OOBE and no user sessions in fresh start.
|
| + session_manager::SessionManager* manager =
|
| + session_manager::SessionManager::Get();
|
| + EXPECT_EQ(session_manager::SessionState::OOBE, manager->session_state());
|
| + EXPECT_EQ(0u, manager->sessions().size());
|
| +
|
| + // Login via fake gaia to add a new user.
|
| + fake_gaia_.SetFakeMergeSessionParams(kTestUsers[0], "fake_sid", "fake_lsid");
|
| + StartSignInScreen();
|
| +
|
| + content::WindowedNotificationObserver session_start_waiter(
|
| + chrome::NOTIFICATION_SESSION_STARTED,
|
| + content::NotificationService::AllSources());
|
| +
|
| + WebUILoginDisplay* login_display = static_cast<WebUILoginDisplay*>(
|
| + ExistingUserController::current_controller()->login_display());
|
| + login_display->ShowSigninScreenForCreds(kTestUsers[0], "fake_password");
|
| +
|
| + session_start_waiter.Wait();
|
| +
|
| + // Verify that session state is ACTIVE with one user session.
|
| + EXPECT_EQ(session_manager::SessionState::ACTIVE, manager->session_state());
|
| + EXPECT_EQ(1u, manager->sessions().size());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChromeSessionManagerTest, PRE_LoginExistingUsers) {
|
| + for (auto user : kTestUsers) {
|
| + RegisterUser(user);
|
| + }
|
| + StartupUtils::MarkOobeCompleted();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ChromeSessionManagerTest, LoginExistingUsers) {
|
| + // Verify that session state is LOGIN_PRIMARY with existing user data dir.
|
| + session_manager::SessionManager* manager =
|
| + session_manager::SessionManager::Get();
|
| + EXPECT_EQ(session_manager::SessionState::LOGIN_PRIMARY,
|
| + manager->session_state());
|
| + EXPECT_EQ(0u, manager->sessions().size());
|
| +
|
| + // Verify that session state is ACTIVE with one user session after signing
|
| + // in a user.
|
| + LoginUser(kTestUsers[0]);
|
| + EXPECT_EQ(session_manager::SessionState::ACTIVE, manager->session_state());
|
| + EXPECT_EQ(1u, manager->sessions().size());
|
| +
|
| + for (size_t i = 1; i < arraysize(kTestUsers); ++i) {
|
| + // Verify that session state is LOGIN_SECONDARY during user adding.
|
| + UserAddingScreen::Get()->Start();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(session_manager::SessionState::LOGIN_SECONDARY,
|
| + manager->session_state());
|
| +
|
| + // Verify that session state is ACTIVE with 1+i user sessions after user
|
| + // is added and new user session is started..
|
| + UserAddingScreenWaiter waiter;
|
| + AddUser(kTestUsers[i]);
|
| + waiter.Wait();
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_EQ(session_manager::SessionState::ACTIVE, manager->session_state());
|
| + EXPECT_EQ(1u + i, manager->sessions().size());
|
| + }
|
| +
|
| + // Verify that session manager has the correct user session info.
|
| + ASSERT_EQ(arraysize(kTestUsers), manager->sessions().size());
|
| + for (size_t i = 0; i < arraysize(kTestUsers); ++i) {
|
| + EXPECT_EQ(kTestUsers[i],
|
| + manager->sessions()[i].user_account_id.GetUserEmail());
|
| + }
|
| +}
|
| +
|
| +} // namespace chromeos
|
|
|