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.
4
5#include "ash/test/test_session_state_delegate.h"
6
7#include <algorithm>
8#include <string>
9
10#include "ash/shell.h"
11#include "ash/system/user/login_status.h"
12#include "base/strings/string16.h"
13#include "base/strings/utf_string_conversions.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16namespace {
17
18// The the "canonicalized" user ID from a given |email| address.
19std::string GetUserIDFromEmail(const std::string& email) {
20  std::string user_id = email;
21  std::transform(user_id.begin(), user_id.end(), user_id.begin(), ::tolower);
22  return user_id;
23}
24
25}  // namespace
26
27namespace ash {
28namespace test {
29
30TestSessionStateDelegate::TestSessionStateDelegate()
31    : has_active_user_(false),
32      active_user_session_started_(false),
33      can_lock_screen_(true),
34      should_lock_screen_before_suspending_(false),
35      screen_locked_(false),
36      user_adding_screen_running_(false),
37      logged_in_users_(1),
38      num_transfer_to_desktop_of_user_calls_(0) {
39}
40
41TestSessionStateDelegate::~TestSessionStateDelegate() {
42}
43
44int TestSessionStateDelegate::GetMaximumNumberOfLoggedInUsers() const {
45  return 3;
46}
47
48int TestSessionStateDelegate::NumberOfLoggedInUsers() const {
49  // TODO(skuhne): Add better test framework to test multiple profiles.
50  return has_active_user_ ? logged_in_users_ : 0;
51}
52
53bool TestSessionStateDelegate::IsActiveUserSessionStarted() const {
54  return active_user_session_started_;
55}
56
57bool TestSessionStateDelegate::CanLockScreen() const {
58  return has_active_user_ && can_lock_screen_;
59}
60
61bool TestSessionStateDelegate::IsScreenLocked() const {
62  return screen_locked_;
63}
64
65bool TestSessionStateDelegate::ShouldLockScreenBeforeSuspending() const {
66  return should_lock_screen_before_suspending_;
67}
68
69void TestSessionStateDelegate::LockScreen() {
70  if (CanLockScreen())
71    screen_locked_ = true;
72}
73
74void TestSessionStateDelegate::UnlockScreen() {
75  screen_locked_ = false;
76}
77
78bool TestSessionStateDelegate::IsUserSessionBlocked() const {
79  return !IsActiveUserSessionStarted() || IsScreenLocked() ||
80      user_adding_screen_running_;
81}
82
83void TestSessionStateDelegate::SetHasActiveUser(bool has_active_user) {
84  has_active_user_ = has_active_user;
85  if (!has_active_user)
86    active_user_session_started_ = false;
87  else
88    Shell::GetInstance()->ShowLauncher();
89}
90
91void TestSessionStateDelegate::SetActiveUserSessionStarted(
92    bool active_user_session_started) {
93  active_user_session_started_ = active_user_session_started;
94  if (active_user_session_started) {
95    has_active_user_ = true;
96    Shell::GetInstance()->CreateLauncher();
97    Shell::GetInstance()->UpdateAfterLoginStatusChange(
98        user::LOGGED_IN_USER);
99  }
100}
101
102void TestSessionStateDelegate::SetCanLockScreen(bool can_lock_screen) {
103  can_lock_screen_ = can_lock_screen;
104}
105
106void TestSessionStateDelegate::SetShouldLockScreenBeforeSuspending(
107    bool should_lock) {
108  should_lock_screen_before_suspending_ = should_lock;
109}
110
111void TestSessionStateDelegate::SetUserAddingScreenRunning(
112    bool user_adding_screen_running) {
113  user_adding_screen_running_ = user_adding_screen_running;
114}
115
116const base::string16 TestSessionStateDelegate::GetUserDisplayName(
117    MultiProfileIndex index) const {
118  return UTF8ToUTF16("Über tray Über tray Über tray Über tray");
119}
120
121const std::string TestSessionStateDelegate::GetUserEmail(
122    MultiProfileIndex index) const {
123  switch (index) {
124    case 0: return "First@tray";  // This is intended to be capitalized.
125    case 1: return "Second@tray";  // This is intended to be capitalized.
126    case 2: return "third@tray";
127    default: return "someone@tray";
128  }
129}
130
131const std::string TestSessionStateDelegate::GetUserID(
132    MultiProfileIndex index) const {
133  return GetUserIDFromEmail(GetUserEmail(index));
134}
135
136const gfx::ImageSkia& TestSessionStateDelegate::GetUserImage(
137    MultiProfileIndex index) const {
138  return null_image_;
139}
140
141void TestSessionStateDelegate::GetLoggedInUsers(UserIdList* users) {
142}
143
144void TestSessionStateDelegate::SwitchActiveUser(const std::string& user_id) {
145  // Make sure this is a user id and not an email address.
146  EXPECT_EQ(user_id, GetUserIDFromEmail(user_id));
147  activated_user_ = user_id;
148}
149
150void TestSessionStateDelegate::CycleActiveUser(CycleUser cycle_user) {
151  activated_user_ = "someone@tray";
152}
153
154void TestSessionStateDelegate::AddSessionStateObserver(
155    SessionStateObserver* observer) {
156}
157
158void TestSessionStateDelegate::RemoveSessionStateObserver(
159    SessionStateObserver* observer) {
160}
161
162bool TestSessionStateDelegate::TransferWindowToDesktopOfUser(
163    aura::Window* window,
164    ash::MultiProfileIndex index) {
165  num_transfer_to_desktop_of_user_calls_++;
166  return false;
167}
168
169}  // namespace test
170}  // namespace ash
171