1 // Copyright (c) 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.
5 #include "ash/test/test_session_state_delegate.h"
10 #include "ash/session/user_info.h"
11 #include "ash/shell.h"
12 #include "ash/system/user/login_status.h"
13 #include "base/stl_util.h"
14 #include "base/strings/string16.h"
15 #include "base/strings/utf_string_conversions.h"
16 #include "testing/gtest/include/gtest/gtest.h"
23 // The the "canonicalized" user ID from a given |email| address.
24 std::string
GetUserIDFromEmail(const std::string
& email
) {
25 std::string user_id
= email
;
26 std::transform(user_id
.begin(), user_id
.end(), user_id
.begin(), ::tolower
);
32 class MockUserInfo
: public UserInfo
{
34 explicit MockUserInfo(const std::string
& id
) : email_(id
) {}
35 virtual ~MockUserInfo() {}
37 void SetUserImage(const gfx::ImageSkia
& user_image
) {
38 user_image_
= user_image
;
41 virtual base::string16
GetDisplayName() const OVERRIDE
{
42 return base::UTF8ToUTF16("Über tray Über tray Über tray Über tray");
45 virtual base::string16
GetGivenName() const OVERRIDE
{
46 return base::UTF8ToUTF16("Über Über Über Über");
49 virtual std::string
GetEmail() const OVERRIDE
{ return email_
; }
51 virtual std::string
GetUserID() const OVERRIDE
{
52 return GetUserIDFromEmail(GetEmail());
55 virtual const gfx::ImageSkia
& GetImage() const OVERRIDE
{
60 gfx::ImageSkia user_image_
;
64 DISALLOW_COPY_AND_ASSIGN(MockUserInfo
);
67 TestSessionStateDelegate::TestSessionStateDelegate()
68 : has_active_user_(false),
69 active_user_session_started_(false),
70 can_lock_screen_(true),
71 should_lock_screen_before_suspending_(false),
72 screen_locked_(false),
73 user_adding_screen_running_(false),
75 active_user_index_(0) {
77 new MockUserInfo("First@tray")); // This is intended to be capitalized.
79 new MockUserInfo("Second@tray")); // This is intended to be capitalized.
80 user_list_
.push_back(new MockUserInfo("third@tray"));
81 user_list_
.push_back(new MockUserInfo("someone@tray"));
84 TestSessionStateDelegate::~TestSessionStateDelegate() {
85 STLDeleteElements(&user_list_
);
88 void TestSessionStateDelegate::AddUser(const std::string user_id
) {
89 user_list_
.push_back(new MockUserInfo(user_id
));
92 const UserInfo
* TestSessionStateDelegate::GetActiveUserInfo() const {
93 return user_list_
[active_user_index_
];
96 content::BrowserContext
*
97 TestSessionStateDelegate::GetBrowserContextByIndex(
98 MultiProfileIndex index
) {
102 content::BrowserContext
*
103 TestSessionStateDelegate::GetBrowserContextForWindow(
104 aura::Window
* window
) {
108 int TestSessionStateDelegate::GetMaximumNumberOfLoggedInUsers() const {
112 int TestSessionStateDelegate::NumberOfLoggedInUsers() const {
113 // TODO(skuhne): Add better test framework to test multiple profiles.
114 return has_active_user_
? logged_in_users_
: 0;
117 bool TestSessionStateDelegate::IsActiveUserSessionStarted() const {
118 return active_user_session_started_
;
121 bool TestSessionStateDelegate::CanLockScreen() const {
122 return has_active_user_
&& can_lock_screen_
;
125 bool TestSessionStateDelegate::IsScreenLocked() const {
126 return screen_locked_
;
129 bool TestSessionStateDelegate::ShouldLockScreenBeforeSuspending() const {
130 return should_lock_screen_before_suspending_
;
133 void TestSessionStateDelegate::LockScreen() {
135 screen_locked_
= true;
138 void TestSessionStateDelegate::UnlockScreen() {
139 screen_locked_
= false;
142 bool TestSessionStateDelegate::IsUserSessionBlocked() const {
143 return !IsActiveUserSessionStarted() || IsScreenLocked() ||
144 user_adding_screen_running_
;
147 SessionStateDelegate::SessionState
TestSessionStateDelegate::GetSessionState()
149 if (user_adding_screen_running_
)
150 return SESSION_STATE_LOGIN_SECONDARY
;
152 // Assuming that if session is not active we're at login.
153 return IsActiveUserSessionStarted() ?
154 SESSION_STATE_ACTIVE
: SESSION_STATE_LOGIN_PRIMARY
;
157 void TestSessionStateDelegate::SetHasActiveUser(bool has_active_user
) {
158 has_active_user_
= has_active_user
;
159 if (!has_active_user
)
160 active_user_session_started_
= false;
162 Shell::GetInstance()->ShowShelf();
165 void TestSessionStateDelegate::SetActiveUserSessionStarted(
166 bool active_user_session_started
) {
167 active_user_session_started_
= active_user_session_started
;
168 if (active_user_session_started
) {
169 has_active_user_
= true;
170 Shell::GetInstance()->CreateShelf();
171 Shell::GetInstance()->UpdateAfterLoginStatusChange(
172 user::LOGGED_IN_USER
);
176 void TestSessionStateDelegate::SetCanLockScreen(bool can_lock_screen
) {
177 can_lock_screen_
= can_lock_screen
;
180 void TestSessionStateDelegate::SetShouldLockScreenBeforeSuspending(
182 should_lock_screen_before_suspending_
= should_lock
;
185 void TestSessionStateDelegate::SetUserAddingScreenRunning(
186 bool user_adding_screen_running
) {
187 user_adding_screen_running_
= user_adding_screen_running
;
190 void TestSessionStateDelegate::SetUserImage(
191 const gfx::ImageSkia
& user_image
) {
192 user_list_
[active_user_index_
]->SetUserImage(user_image
);
195 const UserInfo
* TestSessionStateDelegate::GetUserInfo(
196 MultiProfileIndex index
) const {
197 int max
= static_cast<int>(user_list_
.size());
198 return user_list_
[index
< max
? index
: max
- 1];
201 const UserInfo
* TestSessionStateDelegate::GetUserInfo(
202 content::BrowserContext
* context
) const {
203 return user_list_
[active_user_index_
];
206 bool TestSessionStateDelegate::ShouldShowAvatar(aura::Window
* window
) const {
207 return !GetActiveUserInfo()->GetImage().isNull();
210 void TestSessionStateDelegate::SwitchActiveUser(const std::string
& user_id
) {
211 // Make sure this is a user id and not an email address.
212 EXPECT_EQ(user_id
, GetUserIDFromEmail(user_id
));
213 active_user_index_
= 0;
214 for (std::vector
<MockUserInfo
*>::iterator iter
= user_list_
.begin();
215 iter
!= user_list_
.end();
217 if ((*iter
)->GetUserID() == user_id
) {
218 active_user_index_
= iter
- user_list_
.begin();
222 NOTREACHED() << "Unknown user:" << user_id
;
225 void TestSessionStateDelegate::CycleActiveUser(CycleUser cycle_user
) {
226 SwitchActiveUser("someone@tray");
229 void TestSessionStateDelegate::AddSessionStateObserver(
230 SessionStateObserver
* observer
) {
233 void TestSessionStateDelegate::RemoveSessionStateObserver(
234 SessionStateObserver
* observer
) {