Separate Simple Backend creation from initialization.
[chromium-blink-merge.git] / ash / system / session_length_limit / tray_session_length_limit.h
blob88d601ddcc9d5cb8f5909ec34aaafda71f592b15
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.
5 #ifndef ASH_SYSTEM_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_
6 #define ASH_SYSTEM_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_
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.h"
14 #include "base/timer.h"
16 namespace ash {
17 namespace internal {
19 namespace tray {
20 class RemainingSessionTimeNotificationView;
21 class RemainingSessionTimeTrayView;
24 // Adds a countdown timer to the system tray if the session length is limited.
25 class TraySessionLengthLimit : public SystemTrayItem,
26 public SessionLengthLimitObserver {
27 public:
28 enum LimitState {
29 LIMIT_NONE,
30 LIMIT_SET,
31 LIMIT_EXPIRING_SOON
34 explicit TraySessionLengthLimit(SystemTray* system_tray);
35 virtual ~TraySessionLengthLimit();
37 // SystemTrayItem:
38 virtual views::View* CreateTrayView(user::LoginStatus status) OVERRIDE;
39 virtual views::View* CreateNotificationView(
40 user::LoginStatus status) OVERRIDE;
41 virtual void DestroyTrayView() OVERRIDE;
42 virtual void DestroyNotificationView() OVERRIDE;
43 virtual void UpdateAfterShelfAlignmentChange(
44 ShelfAlignment alignment) OVERRIDE;
46 // SessionLengthLimitObserver:
47 virtual void OnSessionStartTimeChanged() OVERRIDE;
48 virtual void OnSessionLengthLimitChanged() OVERRIDE;
50 LimitState GetLimitState() const;
51 base::TimeDelta GetRemainingSessionTime() const;
53 private:
54 void ShowAndSpeakNotification();
55 void Update();
57 tray::RemainingSessionTimeTrayView* tray_view_;
58 tray::RemainingSessionTimeNotificationView* notification_view_;
60 LimitState limit_state_;
61 base::TimeTicks session_start_time_;
62 base::TimeDelta limit_;
63 base::TimeDelta remaining_session_time_;
64 scoped_ptr<base::RepeatingTimer<TraySessionLengthLimit> > timer_;
66 DISALLOW_COPY_AND_ASSIGN(TraySessionLengthLimit);
69 } // namespace internal
70 } // namespace ash
72 #endif // ASH_SYSTEM_SESSION_LENGTH_LIMIT_TRAY_SESSION_LENGTH_LIMIT_H_