• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_KIOSK_MODE_KIOSK_MODE_SETTINGS_H_
6 #define CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_SETTINGS_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/callback_forward.h"
12 #include "base/time/time.h"
13 #include "chrome/browser/chromeos/policy/app_pack_updater.h"
14 #include "chrome/browser/chromeos/settings/device_settings_service.h"
15 
16 namespace base {
17 template <typename T> struct DefaultLazyInstanceTraits;
18 }
19 
20 namespace chromeos {
21 
22 // This class centralizes all our code to get KioskMode settings; since
23 // KioskMode interferes with normal operations all over Chrome, having all
24 // data about it pulled from a central location would make future
25 // refactorings easier. This class also handles getting trust for the policies
26 // via its init method.
27 //
28 // Note: If Initialize is not called before the various Getters, we'll return
29 // invalid values.
30 class KioskModeSettings {
31  public:
32   static KioskModeSettings* Get();
33 
34   // This method checks if Kiosk Mode is enabled or not.
35   virtual bool IsKioskModeEnabled();
36 
37   // Initialize the settings; this will call the callback once trust is
38   // established with the policy settings provider.
39   virtual void Initialize(const base::Closure& notify_initialized);
40   virtual bool is_initialized() const;
41 
42   // The path to the screensaver extension. This callback may get called
43   // very late, or even never (depending on the state of the app pack).
44   virtual void GetScreensaverPath(
45       policy::AppPackUpdater::ScreenSaverUpdateCallback callback) const;
46 
47   // The timeout before which we'll start showing the screensaver.
48   virtual base::TimeDelta GetScreensaverTimeout() const;
49 
50   // NOTE: The idle logout timeout is the time 'till' we show the idle dialog
51   // box. After we show the dialog box, it remains up for an 'additional'
52   // IdleLogoutWarningTimeout seconds, which adds to the total time before the
53   // user is logged out.
54   // The time to logout the user in on idle.
55   virtual base::TimeDelta GetIdleLogoutTimeout() const;
56 
57   // The time to show the countdown timer for.
58   virtual base::TimeDelta GetIdleLogoutWarningDuration() const;
59 
60   static const int kMaxIdleLogoutTimeout;
61   static const int kMinIdleLogoutTimeout;
62 
63   static const int kMaxIdleLogoutWarningDuration;
64   static const int kMinIdleLogoutWarningDuration;
65 
66  protected:
67   // Needed here so MockKioskModeSettings can inherit from us.
68   KioskModeSettings();
69   virtual ~KioskModeSettings();
70 
71  private:
72   friend struct base::DefaultLazyInstanceTraits<KioskModeSettings>;
73   friend class KioskModeSettingsTest;
74 
75   // Makes sure the browser will switch to kiosk mode if cryptohome was not
76   // ready when the browser was starting after a machine reboot.
77   void VerifyModeIsKnown(DeviceSettingsService::OwnershipStatus status);
78 
79   bool is_initialized_;
80   bool is_kiosk_mode_;
81 
82   // Used for testing.
83   void set_initialized(bool value) { is_initialized_ = value; }
84 
85   std::string screensaver_id_;
86   std::string screensaver_path_;
87   base::TimeDelta screensaver_timeout_;
88   base::TimeDelta idle_logout_timeout_;
89   base::TimeDelta idle_logout_warning_duration_;
90 
91   DISALLOW_COPY_AND_ASSIGN(KioskModeSettings);
92 };
93 
94 }  // namespace chromeos
95 
96 #endif  // CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_SETTINGS_H_
97