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