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 "ash/wm/user_activity_observer.h" 9 #include "base/basictypes.h" 10 #include "base/compiler_specific.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "base/prefs/pref_change_registrar.h" 13 #include "base/threading/thread_checker.h" 14 #include "base/time/time.h" 15 #include "base/timer/timer.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 ash::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 // ash::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_ 76