- add sources.
[platform/framework/web/crosswalk.git] / src / ash / system / session_length_limit / tray_session_length_limit.h
1 // Copyright (c) 2012 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_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_
6 #define ASH_SYSTEM_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_
7
8 #include "ash/system/session_length_limit/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/time/time.h"
14 #include "base/timer/timer.h"
15
16 namespace ash {
17 namespace internal {
18
19 namespace tray {
20 class RemainingSessionTimeTrayView;
21 }
22
23 // Adds a countdown timer to the system tray if the session length is limited.
24 class TraySessionLengthLimit : public SystemTrayItem,
25                                public SessionLengthLimitObserver {
26  public:
27   enum LimitState {
28     LIMIT_NONE,
29     LIMIT_SET,
30     LIMIT_EXPIRING_SOON
31   };
32
33   explicit TraySessionLengthLimit(SystemTray* system_tray);
34   virtual ~TraySessionLengthLimit();
35
36   // SystemTrayItem:
37   virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
38   virtual void DestroyTrayView() OVERRIDE;
39   virtual void UpdateAfterShelfAlignmentChange(
40       ShelfAlignment alignment) OVERRIDE;
41
42   // SessionLengthLimitObserver:
43   virtual void OnSessionStartTimeChanged() OVERRIDE;
44   virtual void OnSessionLengthLimitChanged() OVERRIDE;
45
46   LimitState GetLimitState() const;
47   base::TimeDelta GetRemainingSessionTime() const;
48
49  private:
50   void Update();
51
52   tray::RemainingSessionTimeTrayView* tray_view_;
53
54   LimitState limit_state_;
55   base::TimeTicks session_start_time_;
56   base::TimeDelta limit_;
57   base::TimeDelta remaining_session_time_;
58   scoped_ptr<base::RepeatingTimer<TraySessionLengthLimit> > timer_;
59
60   DISALLOW_COPY_AND_ASSIGN(TraySessionLengthLimit);
61 };
62
63 }  // namespace internal
64 }  // namespace ash
65
66 #endif  // ASH_SYSTEM_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_