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/test/test_system_tray_delegate.h"
6
7#include <string>
8
9#include "ash/session/session_state_delegate.h"
10#include "ash/shell.h"
11#include "ash/system/user/login_status.h"
12#include "base/message_loop/message_loop.h"
13#include "base/time/time.h"
14
15namespace ash {
16namespace test {
17
18namespace {
19
20user::LoginStatus g_initial_status = user::LOGGED_IN_USER;
21
22}  // namespace
23
24TestSystemTrayDelegate::TestSystemTrayDelegate()
25    : should_show_display_notification_(false),
26      login_status_(g_initial_status),
27      session_length_limit_set_(false) {
28}
29
30TestSystemTrayDelegate::~TestSystemTrayDelegate() {
31}
32
33// static
34void TestSystemTrayDelegate::SetInitialLoginStatus(
35    user::LoginStatus login_status) {
36  g_initial_status = login_status;
37}
38
39void TestSystemTrayDelegate::SetLoginStatus(user::LoginStatus login_status) {
40  login_status_ = login_status;
41  Shell::GetInstance()->UpdateAfterLoginStatusChange(login_status);
42}
43
44void TestSystemTrayDelegate::SetSessionLengthLimitForTest(
45    const base::TimeDelta& new_limit) {
46  session_length_limit_ = new_limit;
47  session_length_limit_set_ = true;
48}
49
50void TestSystemTrayDelegate::ClearSessionLengthLimit() {
51  session_length_limit_set_ = false;
52}
53
54user::LoginStatus TestSystemTrayDelegate::GetUserLoginStatus() const {
55  // Initial login status has been changed for testing.
56  if (g_initial_status != user::LOGGED_IN_USER &&
57      g_initial_status == login_status_) {
58    return login_status_;
59  }
60
61  // At new user image screen manager->IsUserLoggedIn() would return true
62  // but there's no browser session available yet so use SessionStarted().
63  SessionStateDelegate* delegate =
64      Shell::GetInstance()->session_state_delegate();
65
66  if (!delegate->IsActiveUserSessionStarted())
67    return ash::user::LOGGED_IN_NONE;
68  if (delegate->IsScreenLocked())
69    return user::LOGGED_IN_LOCKED;
70  return login_status_;
71}
72
73bool TestSystemTrayDelegate::IsUserSupervised() const {
74  return login_status_ == ash::user::LOGGED_IN_SUPERVISED;
75}
76
77bool TestSystemTrayDelegate::ShouldShowDisplayNotification() {
78  return should_show_display_notification_;
79}
80
81bool TestSystemTrayDelegate::GetSessionStartTime(
82    base::TimeTicks* session_start_time) {
83  // Just returns TimeTicks::Now(), so the remaining time is always the
84  // specified limit. This is useful for testing.
85  if (session_length_limit_set_)
86    *session_start_time = base::TimeTicks::Now();
87  return session_length_limit_set_;
88}
89
90bool TestSystemTrayDelegate::GetSessionLengthLimit(
91    base::TimeDelta* session_length_limit) {
92  if (session_length_limit_set_)
93    *session_length_limit = session_length_limit_;
94  return session_length_limit_set_;
95}
96
97void TestSystemTrayDelegate::ShutDown() {
98  base::MessageLoop::current()->Quit();
99}
100
101void TestSystemTrayDelegate::SignOut() {
102  base::MessageLoop::current()->Quit();
103}
104
105}  // namespace test
106}  // namespace ash
107