Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / session_length_limiter.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 CHROME_BROWSER_CHROMEOS_SESSION_LENGTH_LIMITER_H_
6 #define CHROME_BROWSER_CHROMEOS_SESSION_LENGTH_LIMITER_H_
7
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/prefs/pref_change_registrar.h"
12 #include "base/threading/thread_checker.h"
13 #include "base/time/time.h"
14 #include "base/timer/timer.h"
15 #include "ui/wm/core/user_activity_observer.h"
16
17 class PrefService;
18 class PrefRegistrySimple;
19
20 namespace chromeos {
21
22 // Enforces a session length limit by terminating the session when the limit is
23 // reached.
24 class SessionLengthLimiter : public wm::UserActivityObserver {
25  public:
26   class Delegate {
27    public:
28     virtual ~Delegate();
29
30     virtual const base::TimeTicks GetCurrentTime() const = 0;
31     virtual void StopSession() = 0;
32   };
33
34   // Registers preferences.
35   static void RegisterPrefs(PrefRegistrySimple* registry);
36
37   SessionLengthLimiter(Delegate* delegate, bool browser_restarted);
38   virtual ~SessionLengthLimiter();
39
40   // wm::UserActivityObserver:
41   virtual void OnUserActivity(const ui::Event* event) OVERRIDE;
42
43  private:
44   // Attempt to restore the session start time and the flag indicating user
45   // activity from local state. Return |true| if the restore is successful.
46   bool RestoreStateAfterCrash();
47
48   // Update the session start time if possible:
49   // * If instructed to wait for initial user activity, the session start time
50   //   advances every time this method is called as long as no user activity has
51   //   occurred yet. The time is not persisted in local state.
52   // * If instructed not to wait for initial user activity, the session start
53   //   time is set and persisted in local state the first time this method is
54   //   called.
55   // The pref indicating whether to wait for initial user activity may change at
56   // any time, switching between the two behaviors.
57   void UpdateSessionStartTime();
58
59   void UpdateLimit();
60
61   base::ThreadChecker thread_checker_;
62
63   scoped_ptr<Delegate> delegate_;
64   PrefChangeRegistrar pref_change_registrar_;
65
66   scoped_ptr<base::OneShotTimer<SessionLengthLimiter::Delegate> > timer_;
67   base::TimeTicks session_start_time_;
68   bool user_activity_seen_;
69
70   DISALLOW_COPY_AND_ASSIGN(SessionLengthLimiter);
71 };
72
73 }  // namespace chromeos
74
75 #endif  // CHROME_BROWSER_CHROMEOS_SESSION_LENGTH_LIMITER_H_