Chromium Code Reviews| Index: chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.cc |
| diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..30b6ab17eb95fffe843dbf951833f57f4f392f87 |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.cc |
| @@ -0,0 +1,136 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" |
| + |
| +#include <algorithm> |
| + |
| +#include "base/bind.h" |
| +#include "base/command_line.h" |
| +#include "base/lazy_instance.h" |
| +#include "chrome/browser/browser_process.h" |
| +#include "chrome/browser/chromeos/cros_settings.h" |
| +#include "chrome/browser/chromeos/cros_settings_names.h" |
| +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h" |
| +#include "chrome/browser/policy/cloud_policy_constants.h" |
| +#include "chrome/browser/policy/browser_policy_connector.h" |
| +#include "chrome/common/chrome_switches.h" |
| + |
| +namespace chromeos { |
| + |
| +static base::LazyInstance<KioskModeSettings> g_kiosk_mode_settings = |
| + LAZY_INSTANCE_INITIALIZER; |
| + |
| +KioskModeSettings* KioskModeSettings::test_instance_ = NULL; |
|
Mattias Nissler (ping if slow)
2012/03/20 13:10:35
If you were to dependency-inject the KiostModeSett
rkc
2012/03/20 21:00:42
Removed support code for the mock classes for now.
|
| + |
| +// static |
| +bool KioskModeSettings::IsKioskModeEnabled() { |
| + if (test_instance_) |
| + return test_instance_->IsTestKioskModeEnabled(); |
| + |
| + if (g_browser_process) { |
| + policy::BrowserPolicyConnector* bpc = |
| + g_browser_process->browser_policy_connector(); |
| + if (bpc && policy::DEVICE_MODE_KIOSK == bpc->GetDeviceMode()) |
| + return true; |
| + } |
| + // In case we've force-enabled kiosk mode. |
| + if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableKioskMode)) |
| + return true; |
| + |
| + return false; |
| +} |
| + |
| +// static |
| +KioskModeSettings* KioskModeSettings::Get() { |
| + if (test_instance_) |
| + return test_instance_; |
| + else |
| + return g_kiosk_mode_settings.Pointer(); |
| +} |
| + |
| +void KioskModeSettings::Initialize(const base::Closure& notify_initialized) { |
| + CrosSettings* cros_settings = CrosSettings::Get(); |
|
Mattias Nissler (ping if slow)
2012/03/20 13:10:35
You're actually not watching for changes to the se
rkc
2012/03/20 21:00:42
Aren't the kiosk mode settings set in the lockbox
|
| + if (!cros_settings->GetTrusted( |
| + kIdleLogoutTimeout, |
| + base::Bind(&KioskModeSettings::Initialize, |
| + base::Unretained(this), |
| + notify_initialized))) { |
| + return; |
| + } |
| + |
| + // Ignored till we land the code to pull the screensaver path from the app |
| + // packs with the screensaver id. |
| + cros_settings->GetString(kScreenSaverExtensionId, &screensaver_id_); |
| + |
| + int screensaver_timeout = 0; |
| + int idle_logout_timeout = 0; |
| + int idle_logout_warning_duration = 0; |
| + cros_settings->GetInteger(kScreenSaverTimeout, &screensaver_timeout); |
| + cros_settings->GetInteger(kIdleLogoutTimeout, &idle_logout_timeout); |
| + cros_settings->GetInteger(kIdleLogoutWarningDuration, |
| + &idle_logout_warning_duration); |
| + |
| + // Restrict idle timeouts to safe values to prevent them from being turned off |
| + // or otherwise misused. |
| + idle_logout_timeout = std::min(idle_logout_timeout, kMaxIdleLogoutTimeout); |
| + idle_logout_timeout = std::max(idle_logout_timeout, kMinIdleLogoutTimeout); |
| + |
| + idle_logout_warning_duration = |
| + std::min(idle_logout_warning_duration, kMaxIdleLogoutWarningDuration); |
| + idle_logout_warning_duration = |
| + std::max(idle_logout_warning_duration, kMinIdleLogoutWarningDuration); |
| + |
| + screensaver_timeout_ = base::TimeDelta::FromMilliseconds( |
| + screensaver_timeout); |
| + idle_logout_timeout_ = |
| + base::TimeDelta::FromMilliseconds(idle_logout_timeout); |
| + idle_logout_warning_duration_ = |
| + base::TimeDelta::FromMilliseconds(idle_logout_warning_duration); |
| + |
| + is_initialized_ = true; |
| + notify_initialized.Run(); |
| +} |
| + |
| +std::string KioskModeSettings::GetScreensaverPath() const { |
| + if (!is_initialized_) |
| + return std::string(); |
| + |
| + return CommandLine::ForCurrentProcess()-> |
| + GetSwitchValueASCII(switches::kKioskModeScreensaverPath); |
| +} |
| + |
| +base::TimeDelta KioskModeSettings::GetScreensaverTimeout() const { |
| + if (!is_initialized_) |
| + return base::TimeDelta::FromSeconds(-1); |
| + |
| + return screensaver_timeout_; |
| +} |
| + |
| +base::TimeDelta KioskModeSettings::GetIdleLogoutTimeout() const { |
| + if (!is_initialized_) |
| + return base::TimeDelta::FromSeconds(-1); |
| + |
| + return idle_logout_timeout_; |
| +} |
| + |
| +base::TimeDelta KioskModeSettings::GetIdleLogoutWarningDuration() const { |
| + if (!is_initialized_) |
| + return base::TimeDelta::FromSeconds(-1); |
| + |
| + return idle_logout_warning_duration_; |
| +} |
| + |
| +KioskModeSettings::KioskModeSettings() : is_initialized_(false) { |
| +} |
| + |
| +KioskModeSettings::~KioskModeSettings() { |
| +} |
| + |
| +// static |
| +void KioskModeSettings::set_test_instance(KioskModeSettings* instance) { |
| + KioskModeSettings::test_instance_ = instance; |
| +} |
| + |
| +} // namespace chromeos |