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