session_length_limit_model.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright 2018 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. #ifndef ASH_SYSTEM_MODEL_SESSION_LENGTH_LIMIT_MODEL_H_
  5. #define ASH_SYSTEM_MODEL_SESSION_LENGTH_LIMIT_MODEL_H_
  6. #include "ash/public/cpp/session/session_observer.h"
  7. #include "base/observer_list.h"
  8. #include "base/time/time.h"
  9. #include "base/timer/timer.h"
  10. namespace ash {
  11. // Model to manage coutdown timer when the session length is limited.
  12. class SessionLengthLimitModel : public SessionObserver {
  13. public:
  14. class Observer {
  15. public:
  16. virtual ~Observer() {}
  17. // Called when |remaining_session_time| or |limit_state| is updated.
  18. virtual void OnSessionLengthLimitUpdated() = 0;
  19. };
  20. // LIMIT_NONE: The session does not have length limit.
  21. // LIMIT_SET: The session has length limit.
  22. // LIMIT_EXPIRING_SOON: The session will expire soon.
  23. enum LimitState { LIMIT_NONE, LIMIT_SET, LIMIT_EXPIRING_SOON };
  24. SessionLengthLimitModel();
  25. SessionLengthLimitModel(const SessionLengthLimitModel&) = delete;
  26. SessionLengthLimitModel& operator=(const SessionLengthLimitModel&) = delete;
  27. ~SessionLengthLimitModel() override;
  28. void AddObserver(Observer* observer);
  29. void RemoveObserver(Observer* observer);
  30. // SessionObserver:
  31. void OnSessionStateChanged(session_manager::SessionState state) override;
  32. void OnSessionLengthLimitChanged() override;
  33. base::TimeDelta remaining_session_time() const {
  34. return remaining_session_time_;
  35. }
  36. LimitState limit_state() const { return limit_state_; }
  37. private:
  38. // Recalculate |limit_state_| and |remaining_session_time_|.
  39. void Update();
  40. base::TimeDelta remaining_session_time_;
  41. LimitState limit_state_ = LIMIT_NONE;
  42. std::unique_ptr<base::RepeatingTimer> timer_;
  43. base::ObserverList<Observer>::Unchecked observers_;
  44. };
  45. } // namespace ash
  46. #endif // ASH_SYSTEM_MODEL_SESSION_LENGTH_LIMIT_MODEL_H_