1 // Copyright 2014 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_LOGIN_DEMO_MODE_DEMO_MODE_DETECTOR_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_DEMO_MODE_DEMO_MODE_DETECTOR_H_ 7 8 #include <memory> 9 #include <string> 10 11 #include "base/macros.h" 12 #include "base/memory/weak_ptr.h" 13 #include "base/time/tick_clock.h" 14 #include "base/time/time.h" 15 #include "base/timer/timer.h" 16 #include "chrome/browser/chromeos/idle_detector.h" 17 18 class PrefRegistrySimple; 19 20 namespace chromeos { 21 22 // Helper for idle state and demo-mode detection. 23 // Should be initialized on OOBE start. 24 class DemoModeDetector { 25 public: 26 // Interface for notification that device stayed in demo mode long enough 27 // to trigger Demo mode. 28 class Observer { 29 public: OnShouldStartDemoMode()30 virtual void OnShouldStartDemoMode() {} 31 virtual ~Observer() = default; 32 }; 33 34 DemoModeDetector(const base::TickClock* clock, Observer* observer); 35 virtual ~DemoModeDetector(); 36 37 // Registers the preference for derelict state. 38 static void RegisterPrefs(PrefRegistrySimple* registry); 39 40 static const base::TimeDelta kDerelictDetectionTimeout; 41 static const base::TimeDelta kDerelictIdleTimeout; 42 static const base::TimeDelta kOobeTimerUpdateInterval; 43 44 private: 45 void InitDetection(); 46 void StartIdleDetection(); 47 void StartOobeTimer(); 48 void OnIdle(); 49 void OnOobeTimerUpdate(); 50 void SetupTimeouts(); 51 bool IsDerelict(); 52 53 Observer* observer_; 54 55 // Total time this machine has spent on OOBE. 56 base::TimeDelta time_on_oobe_; 57 58 std::unique_ptr<IdleDetector> idle_detector_; 59 60 base::RepeatingTimer oobe_timer_; 61 62 // Timeout to detect if the machine is in a derelict state. 63 base::TimeDelta derelict_detection_timeout_; 64 65 // Timeout before showing our demo app if the machine is in a derelict state. 66 base::TimeDelta derelict_idle_timeout_; 67 68 // Time between updating our total time on oobe. 69 base::TimeDelta oobe_timer_update_interval_; 70 71 bool demo_launched_ = false; 72 73 const base::TickClock* tick_clock_; 74 75 base::WeakPtrFactory<DemoModeDetector> weak_ptr_factory_{this}; 76 77 DISALLOW_COPY_AND_ASSIGN(DemoModeDetector); 78 }; 79 80 } // namespace chromeos 81 82 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_DEMO_MODE_DEMO_MODE_DETECTOR_H_ 83