OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "ash/session/session_state_delegate.h" | |
6 #include "ash/shell.h" | |
7 #include "base/prefs/pref_service.h" | |
8 #include "chrome/browser/chromeos/login/login_display_host_impl.h" | |
9 #include "chrome/browser/chromeos/login/login_manager_test.h" | |
10 #include "chrome/browser/chromeos/login/multi_profile_user_controller.h" | |
11 #include "chrome/browser/chromeos/login/startup_utils.h" | |
12 #include "chrome/browser/chromeos/login/user_adding_screen.h" | |
13 #include "chrome/browser/chromeos/login/user_manager.h" | |
14 #include "chrome/common/chrome_switches.h" | |
15 #include "chrome/common/pref_names.h" | |
16 #include "chrome/test/base/in_process_browser_test.h" | |
17 #include "content/public/test/test_utils.h" | |
18 #include "testing/gtest/include/gtest/gtest.h" | |
19 | |
20 using namespace testing; | |
21 | |
22 namespace { | |
23 | |
24 const char* kTestUsers[] = {"test-user1@gmail.com", | |
25 "test-user2@gmail.com", | |
26 "test-user3@gmail.com"}; | |
27 | |
28 } // anonymous namespace | |
29 | |
30 namespace chromeos { | |
31 | |
32 class UserAddingScreenTest : public LoginManagerTest, | |
33 public UserAddingScreen::Observer { | |
34 public: | |
35 UserAddingScreenTest() : LoginManagerTest(false), | |
36 user_adding_started_(0), | |
37 user_adding_finished_(0) { | |
38 } | |
39 | |
40 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | |
41 LoginManagerTest::SetUpCommandLine(command_line); | |
42 command_line->AppendSwitch(::switches::kMultiProfiles); | |
43 } | |
44 | |
45 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { | |
46 LoginManagerTest::SetUpInProcessBrowserTestFixture(); | |
47 UserAddingScreen::Get()->AddObserver(this); | |
48 } | |
49 | |
50 virtual void OnUserAddingFinished() OVERRIDE { ++user_adding_finished_; } | |
51 | |
52 virtual void OnUserAddingStarted() OVERRIDE { ++user_adding_started_; } | |
53 | |
54 void SetUserCanLock(User* user, bool can_lock) { | |
55 user->set_can_lock(can_lock); | |
56 } | |
57 | |
58 int user_adding_started() { return user_adding_started_; } | |
59 | |
60 int user_adding_finished() { return user_adding_finished_; } | |
61 | |
62 private: | |
63 int user_adding_started_; | |
64 int user_adding_finished_; | |
65 | |
66 DISALLOW_COPY_AND_ASSIGN(UserAddingScreenTest); | |
67 }; | |
68 | |
69 IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, PRE_CancelAdding) { | |
70 RegisterUser(kTestUsers[0]); | |
71 RegisterUser(kTestUsers[1]); | |
72 RegisterUser(kTestUsers[2]); | |
73 StartupUtils::MarkOobeCompleted(); | |
74 } | |
75 | |
76 IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, CancelAdding) { | |
77 EXPECT_CALL(login_utils(), DoBrowserLaunch(_, _)).Times(1); | |
78 EXPECT_EQ(3u, UserManager::Get()->GetUsers().size()); | |
79 EXPECT_EQ(0u, UserManager::Get()->GetLoggedInUsers().size()); | |
80 | |
81 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_LOGIN_PRIMARY, | |
82 ash::Shell::GetInstance()->session_state_delegate()-> | |
83 GetSessionState()); | |
84 | |
85 LoginUser(kTestUsers[0]); | |
86 EXPECT_EQ(1u, UserManager::Get()->GetLoggedInUsers().size()); | |
87 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_ACTIVE, | |
88 ash::Shell::GetInstance()->session_state_delegate()-> | |
89 GetSessionState()); | |
90 | |
91 UserAddingScreen::Get()->Start(); | |
92 content::RunAllPendingInMessageLoop(); | |
93 EXPECT_EQ(1, user_adding_started()); | |
94 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_LOGIN_SECONDARY, | |
95 ash::Shell::GetInstance()->session_state_delegate()-> | |
96 GetSessionState()); | |
97 | |
98 UserAddingScreen::Get()->Cancel(); | |
99 content::RunAllPendingInMessageLoop(); | |
100 EXPECT_EQ(1, user_adding_finished()); | |
101 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_ACTIVE, | |
102 ash::Shell::GetInstance()->session_state_delegate()-> | |
103 GetSessionState()); | |
104 | |
105 EXPECT_TRUE(LoginDisplayHostImpl::default_host() == NULL); | |
106 EXPECT_EQ(1u, UserManager::Get()->GetLoggedInUsers().size()); | |
107 EXPECT_EQ(kTestUsers[0], UserManager::Get()->GetActiveUser()->email()); | |
108 } | |
109 | |
110 IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, PRE_AddingSeveralUsers) { | |
111 RegisterUser(kTestUsers[0]); | |
112 RegisterUser(kTestUsers[1]); | |
113 RegisterUser(kTestUsers[2]); | |
114 StartupUtils::MarkOobeCompleted(); | |
115 } | |
116 | |
117 IN_PROC_BROWSER_TEST_F(UserAddingScreenTest, AddingSeveralUsers) { | |
118 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_LOGIN_PRIMARY, | |
119 ash::Shell::GetInstance()->session_state_delegate()-> | |
120 GetSessionState()); | |
121 EXPECT_CALL(login_utils(), DoBrowserLaunch(_, _)).Times(3); | |
122 LoginUser(kTestUsers[0]); | |
123 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_ACTIVE, | |
124 ash::Shell::GetInstance()->session_state_delegate()-> | |
125 GetSessionState()); | |
126 | |
127 UserManager* user_manager = UserManager::Get(); | |
128 | |
129 for (int i = 1; i < 3; ++i) { | |
130 UserAddingScreen::Get()->Start(); | |
131 content::RunAllPendingInMessageLoop(); | |
132 EXPECT_EQ(i, user_adding_started()); | |
133 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_LOGIN_SECONDARY, | |
134 ash::Shell::GetInstance()->session_state_delegate()-> | |
135 GetSessionState()); | |
136 AddUser(kTestUsers[i]); | |
137 EXPECT_EQ(i, user_adding_finished()); | |
138 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_ACTIVE, | |
139 ash::Shell::GetInstance()->session_state_delegate()-> | |
140 GetSessionState()); | |
141 EXPECT_TRUE(LoginDisplayHostImpl::default_host() == NULL); | |
142 ASSERT_EQ(unsigned(i + 1), user_manager->GetLoggedInUsers().size()); | |
143 } | |
144 | |
145 EXPECT_EQ(ash::SessionStateDelegate::SESSION_STATE_ACTIVE, | |
146 ash::Shell::GetInstance()->session_state_delegate()-> | |
147 GetSessionState()); | |
148 | |
149 // Now check how unlock policy works for these users. | |
150 PrefService* prefs1 = user_manager-> | |
151 GetProfileByUser(user_manager->GetLoggedInUsers()[0])->GetPrefs(); | |
152 PrefService* prefs2 = user_manager-> | |
153 GetProfileByUser(user_manager->GetLoggedInUsers()[1])->GetPrefs(); | |
154 PrefService* prefs3 = user_manager-> | |
155 GetProfileByUser(user_manager->GetLoggedInUsers()[2])->GetPrefs(); | |
156 ASSERT_TRUE(prefs1 != NULL); | |
157 ASSERT_TRUE(prefs2 != NULL); | |
158 ASSERT_TRUE(prefs3 != NULL); | |
159 prefs1->SetBoolean(prefs::kEnableAutoScreenLock, false); | |
160 prefs2->SetBoolean(prefs::kEnableAutoScreenLock, false); | |
161 prefs3->SetBoolean(prefs::kEnableAutoScreenLock, false); | |
162 | |
163 // One of the users has the primary-only policy. | |
164 // List of unlock users doesn't depend on kEnableLockScreen preference. | |
165 prefs1->SetBoolean(prefs::kEnableAutoScreenLock, true); | |
166 prefs1->SetString(prefs::kMultiProfileUserBehavior, | |
167 MultiProfileUserController::kBehaviorPrimaryOnly); | |
168 prefs2->SetString(prefs::kMultiProfileUserBehavior, | |
169 MultiProfileUserController::kBehaviorUnrestricted); | |
170 prefs3->SetString(prefs::kMultiProfileUserBehavior, | |
171 MultiProfileUserController::kBehaviorUnrestricted); | |
172 chromeos::UserList unlock_users = user_manager->GetUnlockUsers(); | |
173 ASSERT_EQ(1UL, unlock_users.size()); | |
174 EXPECT_EQ(kTestUsers[0], unlock_users[0]->email()); | |
175 | |
176 prefs1->SetBoolean(prefs::kEnableAutoScreenLock, false); | |
177 unlock_users = user_manager->GetUnlockUsers(); | |
178 ASSERT_EQ(1UL, unlock_users.size()); | |
179 EXPECT_EQ(kTestUsers[0], unlock_users[0]->email()); | |
180 | |
181 // If all users have unrestricted policy then anyone can perform unlock. | |
182 prefs1->SetString(prefs::kMultiProfileUserBehavior, | |
183 MultiProfileUserController::kBehaviorUnrestricted); | |
184 unlock_users = user_manager->GetUnlockUsers(); | |
185 ASSERT_EQ(3UL, unlock_users.size()); | |
186 for (int i = 0; i < 3; ++i) | |
187 EXPECT_EQ(kTestUsers[i], unlock_users[i]->email()); | |
188 | |
189 // This preference doesn't affect list of unlock users. | |
190 prefs2->SetBoolean(prefs::kEnableAutoScreenLock, true); | |
191 unlock_users = user_manager->GetUnlockUsers(); | |
192 ASSERT_EQ(3UL, unlock_users.size()); | |
193 for (int i = 0; i < 3; ++i) | |
194 EXPECT_EQ(kTestUsers[i], unlock_users[i]->email()); | |
195 | |
196 // Now one of the users is unable to unlock. | |
197 SetUserCanLock(user_manager->GetLoggedInUsers()[2], false); | |
198 unlock_users = user_manager->GetUnlockUsers(); | |
199 ASSERT_EQ(2UL, unlock_users.size()); | |
200 for (int i = 0; i < 2; ++i) | |
201 EXPECT_EQ(kTestUsers[i], unlock_users[i]->email()); | |
202 SetUserCanLock(user_manager->GetLoggedInUsers()[2], true); | |
203 | |
204 // Now one of the users has not-allowed policy. | |
205 // In this scenario this user is not allowed in multi-profile session but | |
206 // if that user happened to still be part of multi-profile session it should | |
207 // not be listed on screen lock. | |
208 prefs3->SetString(prefs::kMultiProfileUserBehavior, | |
209 MultiProfileUserController::kBehaviorNotAllowed); | |
210 unlock_users = user_manager->GetUnlockUsers(); | |
211 ASSERT_EQ(2UL, unlock_users.size()); | |
212 for (int i = 0; i < 2; ++i) | |
213 EXPECT_EQ(kTestUsers[i], unlock_users[i]->email()); | |
214 } | |
215 | |
216 } // namespace chromeos | |
OLD | NEW |