File: managed_session_service.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (167 lines) | stat: -rw-r--r-- 6,462 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_ASH_POLICY_STATUS_COLLECTOR_MANAGED_SESSION_SERVICE_H_
#define CHROME_BROWSER_ASH_POLICY_STATUS_COLLECTOR_MANAGED_SESSION_SERVICE_H_

#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"
#include "base/scoped_multi_source_observation.h"
#include "base/scoped_observation.h"
#include "base/sequence_checker.h"
#include "base/time/clock.h"
#include "base/time/default_clock.h"
#include "chrome/browser/ash/app_mode/kiosk_profile_load_failed_observer.h"
#include "chrome/browser/ash/login/session/user_session_manager.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_observer.h"
#include "chromeos/ash/components/login/auth/auth_status_consumer.h"
#include "chromeos/ash/components/login/session/session_termination_manager.h"
#include "chromeos/dbus/power/power_manager_client.h"
#include "components/account_id/account_id.h"
#include "components/session_manager/core/session_manager_observer.h"
#include "components/user_manager/user_manager.h"
#include "components/user_manager/user_manager_impl.h"

namespace ash {
class UserSessionManager;
}  // namespace ash

namespace session_manager {
class SessionManager;
}  // namespace session_manager

namespace policy {

class ManagedSessionService : public ash::AuthStatusConsumer,
                              public ash::KioskProfileLoadFailedObserver,
                              public ash::SessionTerminationManager::Observer,
                              public ash::UserAuthenticatorObserver,
                              public chromeos::PowerManagerClient::Observer,
                              public ProfileObserver,
                              public session_manager::SessionManagerObserver,
                              public user_manager::UserManager::Observer {
 public:
  class Observer : public base::CheckedObserver {
   public:
    // Occurs when a user's login attempt fails.
    virtual void OnLoginFailure(const ash::AuthFailure& error) {}

    // Occurs when a user has logged in.
    virtual void OnLogin(Profile* profile) {}

    // Occurs when a user has logged out.
    // TODO(b/194215634):: Check if this function can be replaced by
    // `OnSessionTerminationStarted`
    virtual void OnLogout(Profile* profile) {}

    // Occurs when the active user has locked the user session.
    virtual void OnLocked() {}

    // TODO(b/247595531): Merge both Unlock functions into one.
    // Occurs when the active user has unlocked the user session.
    virtual void OnUnlocked() {}

    // Occurs when the active user attempts to unlock the user session.
    virtual void OnUnlockAttempt(
        const bool success,
        const session_manager::UnlockType unlock_type) {}

    // Occurs when the device recovers from a suspend state, where
    // |suspend_time| is the time when the suspend state
    // first occurred. Short duration suspends are not reported.
    virtual void OnResumeActive(base::Time suspend_time) {}

    // Occurs in the beginning of the session termination process.
    virtual void OnSessionTerminationStarted(const user_manager::User* user) {}

    // Occurs just before a user's account will be removed.
    virtual void OnUserToBeRemoved(const AccountId& account_id) {}

    // Occurs after a user's account is removed.
    virtual void OnUserRemoved(const AccountId& account_id,
                               user_manager::UserRemovalReason) {}

    virtual void OnKioskLoginFailure() {}
  };

  explicit ManagedSessionService(
      base::Clock* clock = base::DefaultClock::GetInstance());
  ManagedSessionService(const ManagedSessionService&) = delete;
  ManagedSessionService& operator=(const ManagedSessionService&) = delete;
  ~ManagedSessionService() override;

  void AddObserver(Observer* observer);

  void RemoveObserver(Observer* observer);

  // session_manager::SessionManagerObserver::Observer
  void OnSessionStateChanged() override;
  void OnUserProfileLoaded(const AccountId& account_id) override;
  void OnUnlockScreenAttempt(
      const bool success,
      const session_manager::UnlockType unlock_type) override;

  // user_manager::Observer
  void OnUserToBeRemoved(const AccountId& account_id) override;
  void OnUserRemoved(const AccountId& account_id,
                     user_manager::UserRemovalReason reason) override;

  // ProfileObserver
  void OnProfileWillBeDestroyed(Profile* profile) override;

  // chromeos::PowerManagerClient::Observer
  void SuspendDone(base::TimeDelta sleep_duration) override;

  void OnOnlinePasswordUnusable(std::unique_ptr<ash::UserContext> user_context,
                                bool) override {}
  void OnPasswordChangeDetectedFor(const AccountId& account) override {}
  void OnOldEncryptionDetected(std::unique_ptr<ash::UserContext> user_context,
                               bool has_incomplete_migration) override {}
  void OnAuthSuccess(const ash::UserContext& user_context) override {}

  void OnAuthFailure(const ash::AuthFailure& error) override;

  void OnAuthAttemptStarted() override;

  void OnSessionWillBeTerminated() override;

  void OnKioskProfileLoadFailed() override;

 private:
  void SetLoginStatus();

  bool is_session_locked_;

  bool is_logged_in_observed_ = false;

  raw_ptr<base::Clock> clock_;

  base::ObserverList<Observer> observers_;

  const raw_ptr<session_manager::SessionManager> session_manager_;

  base::ScopedMultiSourceObservation<Profile, ProfileObserver>
      profile_observations_{this};
  base::ScopedObservation<session_manager::SessionManager,
                          session_manager::SessionManagerObserver>
      session_manager_observation_{this};
  base::ScopedObservation<chromeos::PowerManagerClient,
                          chromeos::PowerManagerClient::Observer>
      power_manager_observation_{this};
  base::ScopedObservation<ash::UserSessionManager,
                          ash::UserAuthenticatorObserver>
      authenticator_observation_{this};

  base::ScopedObservation<user_manager::UserManager,
                          user_manager::UserManager::Observer>
      user_manager_observation_{this};

  SEQUENCE_CHECKER(sequence_checker_);
};

}  // namespace policy

#endif  // CHROME_BROWSER_ASH_POLICY_STATUS_COLLECTOR_MANAGED_SESSION_SERVICE_H_