Home | History | Annotate | Download | only in chromeos
      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