• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 #ifndef ASH_SYSTEM_CHROMEOS_SESSION_SESSION_LENGTH_LIMIT_H_
6 #define ASH_SYSTEM_CHROMEOS_SESSION_SESSION_LENGTH_LIMIT_H_
7 
8 #include "ash/system/chromeos/session/session_length_limit_observer.h"
9 #include "ash/system/tray/system_tray_item.h"
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/strings/string16.h"
14 #include "base/time/time.h"
15 #include "base/timer/timer.h"
16 
17 namespace ash {
18 namespace test {
19 class TraySessionLengthLimitTest;
20 }
21 
22 class LabelTrayView;
23 
24 // Adds a countdown timer to the system tray if the session length is limited.
25 class ASH_EXPORT TraySessionLengthLimit : public SystemTrayItem,
26                                           public SessionLengthLimitObserver {
27 public:
28   enum LimitState {
29     LIMIT_NONE,
30     LIMIT_SET,
31     LIMIT_EXPIRING_SOON
32   };
33 
34   explicit TraySessionLengthLimit(SystemTray* system_tray);
35   virtual ~TraySessionLengthLimit();
36 
37   // SystemTrayItem:
38   virtual views::View* CreateDefaultView(user::LoginStatus status) OVERRIDE;
39   virtual void DestroyDefaultView() OVERRIDE;
40 
41   // SessionLengthLimitObserver:
42   virtual void OnSessionStartTimeChanged() OVERRIDE;
43   virtual void OnSessionLengthLimitChanged() OVERRIDE;
44 
45  private:
46   friend class test::TraySessionLengthLimitTest;
47 
48   static const char kNotificationId[];
49 
50   // Update state, notification and tray bubble view.  Called by the
51   // RepeatingTimer in regular intervals and also by OnSession*Changed().
52   void Update();
53 
54   // Recalculate |limit_state_| and |remaining_session_time_|.
55   void UpdateState();
56 
57   void UpdateNotification();
58   void UpdateTrayBubbleView() const;
59 
60   // These require that the state has been updated before.
61   base::string16 ComposeNotificationMessage() const;
62   base::string16 ComposeTrayBubbleMessage() const;
63 
64   base::TimeTicks session_start_time_;
65   base::TimeDelta time_limit_;
66   base::TimeDelta remaining_session_time_;
67 
68   LimitState limit_state_;       // Current state.
69   LimitState last_limit_state_;  // State of last notification update.
70 
71   LabelTrayView* tray_bubble_view_;
72   scoped_ptr<base::RepeatingTimer<TraySessionLengthLimit> > timer_;
73 
74   DISALLOW_COPY_AND_ASSIGN(TraySessionLengthLimit);
75 };
76 
77 }  // namespace ash
78 
79 #endif  // ASH_SYSTEM_CHROMEOS_SESSION_SESSION_LENGTH_LIMIT_H_
80