Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Unified Diff: chrome/browser/ui/ash/session_controller_client_unittest.cc

Issue 2878723002: Merge "cros: Update ash when prefs related to lock are changed" (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/ash/session_controller_client_unittest.cc
diff --git a/chrome/browser/ui/ash/session_controller_client_unittest.cc b/chrome/browser/ui/ash/session_controller_client_unittest.cc
index 661034316ebb325e70607e8b50250f13ec14ac2b..dd2c6f7d7f13d374df26d21742be5b67fa90eb9e 100644
--- a/chrome/browser/ui/ash/session_controller_client_unittest.cc
+++ b/chrome/browser/ui/ash/session_controller_client_unittest.cc
@@ -20,6 +20,8 @@
#include "chrome/common/pref_names.h"
#include "chrome/test/base/testing_browser_process.h"
#include "chrome/test/base/testing_profile_manager.h"
+#include "components/prefs/pref_service.h"
+#include "components/session_manager/core/session_manager.h"
#include "components/signin/core/account_id/account_id.h"
#include "components/user_manager/user_manager.h"
#include "content/public/test/test_browser_thread_bundle.h"
@@ -29,6 +31,7 @@
#include "testing/gtest/include/gtest/gtest.h"
using chromeos::FakeChromeUserManager;
+using session_manager::SessionState;
namespace {
@@ -45,6 +48,90 @@ std::unique_ptr<KeyedService> CreateTestPolicyCertService(
user_manager::UserManager::Get());
}
+// A user manager that does not set profiles as loaded and notifies observers
+// when users being added to a session.
+class TestChromeUserManager : public FakeChromeUserManager {
+ public:
+ TestChromeUserManager() = default;
+ ~TestChromeUserManager() override = default;
+
+ // user_manager::UserManager:
+ void UserLoggedIn(const AccountId& account_id,
+ const std::string& user_id_hash,
+ bool browser_restart) override {
+ FakeChromeUserManager::UserLoggedIn(account_id, user_id_hash,
+ browser_restart);
+ active_user_ = const_cast<user_manager::User*>(FindUser(account_id));
+ NotifyOnLogin();
+ }
+
+ user_manager::UserList GetUnlockUsers() const override {
+ // Test case UserPrefsChange expects that the list of the unlock users
+ // depends on prefs::kAllowScreenLock.
+ user_manager::UserList unlock_users;
+ for (user_manager::User* user : users_) {
+ Profile* user_profile =
+ chromeos::ProfileHelper::Get()->GetProfileByUser(user);
+ // Skip if user has a profile and kAllowScreenLock is set to false.
+ if (user_profile &&
+ !user_profile->GetPrefs()->GetBoolean(prefs::kAllowScreenLock)) {
+ continue;
+ }
+
+ unlock_users.push_back(user);
+ }
+
+ return unlock_users;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestChromeUserManager);
+};
+
+// A session controller interface implementation that tracks sessions and users.
+class TestSessionController : public ash::mojom::SessionController {
+ public:
+ TestSessionController() : binding_(this) {}
+ ~TestSessionController() override {}
+
+ ash::mojom::SessionControllerPtr CreateInterfacePtrAndBind() {
+ return binding_.CreateInterfacePtrAndBind();
+ }
+
+ ash::mojom::SessionInfo* last_session_info() {
+ return last_session_info_.get();
+ }
+
+ ash::mojom::UserSession* last_user_session() {
+ return last_user_session_.get();
+ }
+
+ int update_user_session_count() { return update_user_session_count_; }
+
+ // ash::mojom::SessionController:
+ void SetClient(ash::mojom::SessionControllerClientPtr client) override {}
+ void SetSessionInfo(ash::mojom::SessionInfoPtr info) override {
+ last_session_info_ = info->Clone();
+ }
+ void UpdateUserSession(ash::mojom::UserSessionPtr user_session) override {
+ last_user_session_ = user_session->Clone();
+ update_user_session_count_++;
+ }
+ void SetUserSessionOrder(
+ const std::vector<uint32_t>& user_session_order) override {}
+ void RunUnlockAnimation(const RunUnlockAnimationCallback& callback) override {
+ }
+
+ private:
+ mojo::Binding<ash::mojom::SessionController> binding_;
+
+ ash::mojom::SessionInfoPtr last_session_info_;
+ ash::mojom::UserSessionPtr last_user_session_;
+ int update_user_session_count_ = 0;
+
+ DISALLOW_COPY_AND_ASSIGN(TestSessionController);
+};
+
} // namespace
class SessionControllerClientTest : public testing::Test {
@@ -53,17 +140,19 @@ class SessionControllerClientTest : public testing::Test {
~SessionControllerClientTest() override {}
void SetUp() override {
- // Initialize the UserManager singleton to a fresh FakeChromeUserManager
- // instance.
- user_manager_ = new FakeChromeUserManager;
+ testing::Test::SetUp();
+
+ // Initialize the UserManager singleton.
+ user_manager_ = new TestChromeUserManager;
user_manager_enabler_.reset(
new chromeos::ScopedUserManagerEnabler(user_manager_));
- testing::Test::SetUp();
+ profile_manager_.reset(
+ new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
+ ASSERT_TRUE(profile_manager_->SetUp());
}
void TearDown() override {
- testing::Test::TearDown();
user_manager_enabler_.reset();
user_manager_ = nullptr;
// Clear our cached pointer to the PolicyCertVerifier.
@@ -77,6 +166,8 @@ class SessionControllerClientTest : public testing::Test {
// PolicyCertService::OnTrustAnchorsChanged() which is called from
// PolicyCertService::Shutdown()).
base::RunLoop().RunUntilIdle();
+
+ testing::Test::TearDown();
}
// Add and log in a user to the session.
@@ -93,34 +184,39 @@ class SessionControllerClientTest : public testing::Test {
.GetUserEmail();
}
- FakeChromeUserManager* user_manager() { return user_manager_; }
-
- void InitForMultiProfile() {
- profile_manager_.reset(
- new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
- ASSERT_TRUE(profile_manager_->SetUp());
+ TestChromeUserManager* user_manager() { return user_manager_; }
+ // Adds a regular user with a profile.
+ TestingProfile* InitForMultiProfile() {
const AccountId account_id(AccountId::FromUserEmail(kUser));
const user_manager::User* user = user_manager()->AddUser(account_id);
// Note that user profiles are created after user login in reality.
- user_profile_ =
+ return CreateTestingProfile(user);
+ }
+
+ // Calls private methods to create a testing profile. The created profile
+ // is owned by ProfileManager.
+ TestingProfile* CreateTestingProfile(const user_manager::User* user) {
+ const AccountId& account_id = user->GetAccountId();
+ TestingProfile* profile =
profile_manager_->CreateTestingProfile(account_id.GetUserEmail());
- user_profile_->set_profile_name(account_id.GetUserEmail());
- chromeos::ProfileHelper::Get()->SetUserToProfileMappingForTesting(
- user, user_profile_);
+ profile->set_profile_name(account_id.GetUserEmail());
+ chromeos::ProfileHelper::Get()->SetUserToProfileMappingForTesting(user,
+ profile);
+ return profile;
}
content::TestBrowserThreadBundle threads_;
std::unique_ptr<policy::PolicyCertVerifier> cert_verifier_;
std::unique_ptr<TestingProfileManager> profile_manager_;
- TestingProfile* user_profile_;
+ session_manager::SessionManager session_manager_;
private:
std::unique_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_;
// Owned by |user_manager_enabler_|.
- FakeChromeUserManager* user_manager_ = nullptr;
+ TestChromeUserManager* user_manager_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(SessionControllerClientTest);
};
@@ -141,9 +237,11 @@ TEST_F(SessionControllerClientTest, CyclingThreeUsers) {
UserAddedToSession("firstuser@test.com");
UserAddedToSession("seconduser@test.com");
UserAddedToSession("thirduser@test.com");
- const ash::CycleUserDirection forward = ash::CycleUserDirection::NEXT;
+ user_manager()->SwitchActiveUser(
+ AccountId::FromUserEmail("firstuser@test.com"));
// Cycle forward.
+ const ash::CycleUserDirection forward = ash::CycleUserDirection::NEXT;
EXPECT_EQ("firstuser@test.com", GetActiveUserEmail());
SessionControllerClient::DoCycleActiveUser(forward);
EXPECT_EQ("seconduser@test.com", GetActiveUserEmail());
@@ -164,7 +262,7 @@ TEST_F(SessionControllerClientTest, CyclingThreeUsers) {
// Make sure MultiProfile disabled by primary user policy.
TEST_F(SessionControllerClientTest, MultiProfileDisallowedByUserPolicy) {
- InitForMultiProfile();
+ TestingProfile* user_profile = InitForMultiProfile();
EXPECT_EQ(ash::AddUserSessionPolicy::ALLOWED,
SessionControllerClient::GetAddUserSessionPolicy());
const AccountId account_id(AccountId::FromUserEmail(kUser));
@@ -176,7 +274,7 @@ TEST_F(SessionControllerClientTest, MultiProfileDisallowedByUserPolicy) {
EXPECT_EQ(ash::AddUserSessionPolicy::ALLOWED,
SessionControllerClient::GetAddUserSessionPolicy());
- user_profile_->GetPrefs()->SetString(
+ user_profile->GetPrefs()->SetString(
prefs::kMultiProfileUserBehavior,
chromeos::MultiProfileUserController::kBehaviorNotAllowed);
EXPECT_EQ(ash::AddUserSessionPolicy::ERROR_NOT_ALLOWED_PRIMARY_USER,
@@ -205,7 +303,7 @@ TEST_F(SessionControllerClientTest,
// Make sure MultiProfile disabled by primary user certificates in memory.
TEST_F(SessionControllerClientTest,
MultiProfileDisallowedByPrimaryUserCertificatesInMemory) {
- InitForMultiProfile();
+ TestingProfile* user_profile = InitForMultiProfile();
user_manager()->AddUser(AccountId::FromUserEmail("bb@b.b"));
const AccountId account_id(AccountId::FromUserEmail(kUser));
@@ -216,9 +314,9 @@ TEST_F(SessionControllerClientTest,
g_policy_cert_verifier_for_factory = cert_verifier_.get();
ASSERT_TRUE(
policy::PolicyCertServiceFactory::GetInstance()->SetTestingFactoryAndUse(
- user_profile_, CreateTestPolicyCertService));
+ user_profile, CreateTestPolicyCertService));
policy::PolicyCertService* service =
- policy::PolicyCertServiceFactory::GetForProfile(user_profile_);
+ policy::PolicyCertServiceFactory::GetForProfile(user_profile);
ASSERT_TRUE(service);
EXPECT_FALSE(service->has_policy_certificates());
@@ -270,16 +368,57 @@ TEST_F(SessionControllerClientTest,
// Make sure adding users to multiprofiles disabled by primary user policy.
TEST_F(SessionControllerClientTest,
AddUserToMultiprofileDisallowedByPrimaryUserPolicy) {
- InitForMultiProfile();
+ TestingProfile* user_profile = InitForMultiProfile();
EXPECT_EQ(ash::AddUserSessionPolicy::ALLOWED,
SessionControllerClient::GetAddUserSessionPolicy());
const AccountId account_id(AccountId::FromUserEmail(kUser));
user_manager()->LoginUser(account_id);
- user_profile_->GetPrefs()->SetString(
+ user_profile->GetPrefs()->SetString(
prefs::kMultiProfileUserBehavior,
chromeos::MultiProfileUserController::kBehaviorNotAllowed);
user_manager()->AddUser(AccountId::FromUserEmail("bb@b.b"));
EXPECT_EQ(ash::AddUserSessionPolicy::ERROR_NOT_ALLOWED_PRIMARY_USER,
SessionControllerClient::GetAddUserSessionPolicy());
}
+
+TEST_F(SessionControllerClientTest, UserPrefsChange) {
+ // Create an object to test and connect it to our test interface.
+ SessionControllerClient client;
+ TestSessionController session_controller;
+ client.session_controller_ = session_controller.CreateInterfacePtrAndBind();
+ client.Init();
+ SessionControllerClient::FlushForTesting();
+
+ // Simulate login.
+ const AccountId account_id(AccountId::FromUserEmail("user@test.com"));
+ const user_manager::User* user = user_manager()->AddUser(account_id);
+ session_manager_.CreateSession(
+ account_id, chromeos::ProfileHelper::GetUserIdHashByUserIdForTesting(
+ "user@test.com"));
+ session_manager_.SetSessionState(SessionState::ACTIVE);
+ SessionControllerClient::FlushForTesting();
+
+ // Simulate the notification that the profile is ready.
+ TestingProfile* const user_profile = CreateTestingProfile(user);
+ client.OnLoginUserProfilePrepared(user_profile);
+
+ // Manipulate user prefs and verify SessionController is updated.
+ PrefService* const user_prefs = user_profile->GetPrefs();
+
+ user_prefs->SetBoolean(prefs::kAllowScreenLock, true);
+ SessionControllerClient::FlushForTesting();
+ EXPECT_TRUE(session_controller.last_session_info()->can_lock_screen);
+ user_prefs->SetBoolean(prefs::kAllowScreenLock, false);
+ SessionControllerClient::FlushForTesting();
+ EXPECT_FALSE(session_controller.last_session_info()->can_lock_screen);
+
+ user_prefs->SetBoolean(prefs::kEnableAutoScreenLock, true);
+ SessionControllerClient::FlushForTesting();
+ EXPECT_TRUE(
+ session_controller.last_session_info()->should_lock_screen_automatically);
+ user_prefs->SetBoolean(prefs::kEnableAutoScreenLock, false);
+ SessionControllerClient::FlushForTesting();
+ EXPECT_FALSE(
+ session_controller.last_session_info()->should_lock_screen_automatically);
+}
« no previous file with comments | « chrome/browser/ui/ash/session_controller_client.cc ('k') | chrome/browser/ui/views/ash/chrome_browser_main_extra_parts_ash.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698