1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_ASH_SESSION_STATE_DELEGATE_CHROMEOS_H_ 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define CHROME_BROWSER_UI_ASH_SESSION_STATE_DELEGATE_CHROMEOS_H_ 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ash/session/session_state_delegate.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/basictypes.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/compiler_specific.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/observer_list.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/user_adding_screen.h" 13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "chromeos/login/login_state.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace ash { 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class SessionStateObserver; 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace ash 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class SessionStateDelegateChromeos 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : public ash::SessionStateDelegate, 22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public chromeos::LoginState::Observer, 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public user_manager::UserManager::UserSessionStateObserver, 24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch public chromeos::UserAddingScreen::Observer { 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SessionStateDelegateChromeos(); 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~SessionStateDelegateChromeos(); 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // ash::SessionStateDelegate: 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual content::BrowserContext* GetBrowserContextByIndex( 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ash::MultiProfileIndex index) OVERRIDE; 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual content::BrowserContext* GetBrowserContextForWindow( 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch aura::Window* window) OVERRIDE; 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual int GetMaximumNumberOfLoggedInUsers() const OVERRIDE; 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual int NumberOfLoggedInUsers() const OVERRIDE; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool CanAddUserToMultiProfile(AddUserError* error) const OVERRIDE; 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool IsActiveUserSessionStarted() const OVERRIDE; 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool CanLockScreen() const OVERRIDE; 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool IsScreenLocked() const OVERRIDE; 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual bool ShouldLockScreenBeforeSuspending() const OVERRIDE; 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void LockScreen() OVERRIDE; 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void UnlockScreen() OVERRIDE; 43bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch virtual bool IsUserSessionBlocked() const OVERRIDE; 44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual SessionState GetSessionState() const OVERRIDE; 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual const user_manager::UserInfo* GetUserInfo( 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ash::MultiProfileIndex index) const OVERRIDE; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual const user_manager::UserInfo* GetUserInfo( 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::BrowserContext* context) const OVERRIDE; 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool ShouldShowAvatar(aura::Window* window) const OVERRIDE; 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void SwitchActiveUser(const std::string& user_id) OVERRIDE; 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void CycleActiveUser(CycleUser cycle_user) OVERRIDE; 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual bool IsMultiProfileAllowedByPrimaryUserPolicy() const OVERRIDE; 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void AddSessionStateObserver( 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ash::SessionStateObserver* observer) OVERRIDE; 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void RemoveSessionStateObserver( 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ash::SessionStateObserver* observer) OVERRIDE; 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // chromeos::LoginState::Observer overrides. 59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void LoggedInStateChanged() OVERRIDE; 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // user_manager::UserManager::UserSessionStateObserver: 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void ActiveUserChanged( 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* active_user) OVERRIDE; 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void UserAddedToSession( 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const user_manager::User* added_user) OVERRIDE; 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // chromeos::UserAddingScreen::Observer: 68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void OnUserAddingStarted() OVERRIDE; 69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch virtual void OnUserAddingFinished() OVERRIDE; 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Sets session state to |new_state|. 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // If |force| is true then |new_state| is set even if existing session 74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // state is the same (used for explicit initialization). 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void SetSessionState(SessionState new_state, bool force); 76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Notify observers about session state change. 78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch void NotifySessionStateChanged(); 79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Switches to a new user. This call might show a dialog asking the user if he 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // wants to stop desktop casting before switching. 8203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void TryToSwitchUser(const std::string& user_id); 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // List of observers is only used on Chrome OS for now. 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ObserverList<ash::SessionStateObserver> session_state_observer_list_; 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Session state (e.g. login screen vs. user session). 88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch SessionState session_state_; 89a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SessionStateDelegateChromeos); 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif // CHROME_BROWSER_UI_ASH_SESSION_STATE_DELEGATE_CHROMEOS_H_ 94