diff options
18 files changed, 428 insertions, 197 deletions
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 5fc248a..3cf8452 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc @@ -25,9 +25,9 @@ #include "chrome/browser/chromeos/imageburner/burn_manager.h" #include "chrome/browser/chromeos/input_method/input_method_manager.h" #include "chrome/browser/chromeos/input_method/xkeyboard.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.h" #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/chromeos/legacy_window_manager/initial_browser_window_observer.h" #include "chrome/browser/chromeos/login/authenticator.h" #include "chrome/browser/chromeos/login/login_utils.h" @@ -169,7 +169,7 @@ void OptionallyRunChromeOSLoginManager(const CommandLine& parsed_command_line, browser::ShowLoginWizard(first_screen, size); - if (chromeos::KioskModeHelper::IsKioskModeEnabled()) + if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) chromeos::InitializeKioskModeScreensaver(); } else if (parsed_command_line.HasSwitch(switches::kLoginUser) && parsed_command_line.HasSwitch(switches::kLoginPassword)) { @@ -194,7 +194,7 @@ ChromeBrowserMainPartsChromeos::ChromeBrowserMainPartsChromeos( } ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() { - if (chromeos::KioskModeHelper::IsKioskModeEnabled()) + if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) chromeos::ShutdownKioskModeScreensaver(); cryptohome::AsyncMethodCaller::Shutdown(); chromeos::disks::DiskMountManager::Shutdown(); @@ -320,7 +320,7 @@ void ChromeBrowserMainPartsChromeos::PreProfileInit() { // Initialize the screen locker now so that it can receive // LOGIN_USER_CHANGED notification from UserManager. - if (chromeos::KioskModeHelper::IsKioskModeEnabled()) { + if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) { chromeos::InitializeKioskModeIdleLogout(); } else { chromeos::ScreenLocker::InitClass(); diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.cc deleted file mode 100644 index 1ae8661..0000000 --- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.cc +++ /dev/null @@ -1,85 +0,0 @@ -// 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_helper.h" - -#include "base/bind.h" -#include "base/command_line.h" -#include "base/lazy_instance.h" -#include "chrome/browser/browser_process.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 { - -const int64 kScreensaverIdleTimeout = 60; -const int64 kLoginIdleTimeout = 100; -const int64 kLoginIdleCountdownTimeout = 20; - -} // namespace - -namespace chromeos { - -static base::LazyInstance<KioskModeHelper> g_kiosk_mode_helper = - LAZY_INSTANCE_INITIALIZER; - -// static -bool KioskModeHelper::IsKioskModeEnabled() { - 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 -KioskModeHelper* KioskModeHelper::Get() { - return g_kiosk_mode_helper.Pointer(); -} - -void KioskModeHelper::Initialize(const base::Closure& notify_initialized) { - is_initialized_ = true; - notify_initialized.Run(); -} - -std::string KioskModeHelper::GetScreensaverPath() const { - if (!is_initialized_) - return std::string(); - - return CommandLine::ForCurrentProcess()-> - GetSwitchValueASCII(switches::kKioskModeScreensaverPath); -} - -int64 KioskModeHelper::GetScreensaverTimeout() const { - if (!is_initialized_) - return -1; - - return kScreensaverIdleTimeout; -} - -int64 KioskModeHelper::GetIdleLogoutTimeout() const { - if (!is_initialized_) - return -1; - - return kLoginIdleTimeout; -} -int64 KioskModeHelper::GetIdleLogoutWarningTimeout() const { - if (!is_initialized_) - return -1; - - return kLoginIdleCountdownTimeout; -} - -KioskModeHelper::KioskModeHelper() : is_initialized_(false) { -} - -} // namespace chromeos diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h deleted file mode 100644 index b9ba08d..0000000 --- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h +++ /dev/null @@ -1,64 +0,0 @@ -// 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. - -#ifndef CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_HELPER_H_ -#define CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_HELPER_H_ -#pragma once - -#include <string> - -#include "base/basictypes.h" -#include "base/callback_forward.h" - -namespace base { -template <typename T> struct DefaultLazyInstanceTraits; -} - -// This class centralizes all our code to get KioskMode settings; since -// KioskMode interferes with normal operations all over Chrome, having all -// data about it pulled from a central location would make future -// refactorings easier. This class also handles getting trust for the policies -// via it's init method. -// -// Note: If Initialize is not called before the various Getters, we'll return -// invalid values. -// -// TODO(rkc): Once the enterprise policy side of this code is checked in, add -// code to pull from the enterprise policy instead of flags and constants. -namespace chromeos { - -class KioskModeHelper { - public: - // This method checks if Kiosk Mode is enabled or not. - static bool IsKioskModeEnabled(); - - static KioskModeHelper* Get(); - - // Initialize the settings helper; this will wait till trust is established - // for the enterprise policies then call the callback to notify the caller. - void Initialize(const base::Closure& notify_initialized); - bool is_initialized() const { return is_initialized_; } - - // The path to the screensaver extension. - std::string GetScreensaverPath() const; - // The timeout before which we'll start showing the screensaver. - int64 GetScreensaverTimeout() const; - // The time to logout the user in on idle. - int64 GetIdleLogoutTimeout() const; - // The time to show the countdown timer for. - int64 GetIdleLogoutWarningTimeout() const; - - private: - friend struct base::DefaultLazyInstanceTraits<KioskModeHelper>; - KioskModeHelper(); - - bool is_initialized_; - - DISALLOW_COPY_AND_ASSIGN(KioskModeHelper); -}; - - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_HELPER_H_ diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.cc index e22b443..e62c129 100644 --- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.cc +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.cc @@ -9,7 +9,7 @@ #include "base/logging.h" #include "base/message_loop.h" #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/chromeos/dbus/power_manager_client.h" #include "chrome/browser/chromeos/ui/idle_logout_dialog_view.h" #include "chrome/common/chrome_notification_types.h" @@ -38,10 +38,10 @@ void CloseIdleLogoutDialog() { namespace chromeos { KioskModeIdleLogout::KioskModeIdleLogout() { - if (chromeos::KioskModeHelper::Get()->is_initialized()) + if (chromeos::KioskModeSettings::Get()->is_initialized()) Setup(); else - chromeos::KioskModeHelper::Get()->Initialize( + chromeos::KioskModeSettings::Get()->Initialize( base::Bind(&KioskModeIdleLogout::Setup, base::Unretained(this))); } @@ -63,9 +63,10 @@ void KioskModeIdleLogout::Observe( power_manager->AddObserver(this); // Register for the next Idle for kLoginIdleTimeout event. - chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> - RequestIdleNotification( - chromeos::KioskModeHelper::Get()->GetIdleLogoutTimeout() * 1000); + power_manager->RequestIdleNotification( + chromeos::KioskModeSettings::Get()-> + GetIdleLogoutTimeout().InMilliseconds()); + } } @@ -85,8 +86,8 @@ void KioskModeIdleLogout::ActiveNotify() { // Now that we're active, register a request for notification for // the next time we go idle for kLoginIdleTimeout seconds. chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> - RequestIdleNotification( - chromeos::KioskModeHelper::Get()->GetIdleLogoutTimeout() * 1000); + RequestIdleNotification(chromeos::KioskModeSettings::Get()-> + GetIdleLogoutTimeout().InMilliseconds()); } static base::LazyInstance<KioskModeIdleLogout> diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc index 8f1febb..ead0d21 100644 --- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc @@ -8,7 +8,7 @@ #include "base/lazy_instance.h" #include "base/logging.h" #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/chromeos/login/existing_user_controller.h" #include "chrome/browser/chromeos/login/user_manager.h" #include "chrome/browser/chromeos/ui/screensaver_extension_dialog.h" @@ -18,13 +18,15 @@ namespace chromeos { KioskModeScreensaver::KioskModeScreensaver() { - if (chromeos::KioskModeHelper::Get()->is_initialized()) - Setup(); - else - chromeos::KioskModeHelper::Get()->Initialize( - base::Bind(&KioskModeScreensaver::Setup, - base::Unretained(this))); + chromeos::KioskModeSettings* kiosk_mode_settings = + chromeos::KioskModeSettings::Get(); + if (kiosk_mode_settings->is_initialized()) { + Setup(); + } else { + kiosk_mode_settings->Initialize(base::Bind(&KioskModeScreensaver::Setup, + base::Unretained(this))); + } } KioskModeScreensaver::~KioskModeScreensaver() { 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 0000000..54e2c06 --- /dev/null +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.cc @@ -0,0 +1,125 @@ +// 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; + +bool KioskModeSettings::IsKioskModeEnabled() { + 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() { + return g_kiosk_mode_settings.Pointer(); +} + +void KioskModeSettings::Initialize(const base::Closure& notify_initialized) { + CrosSettings* cros_settings = CrosSettings::Get(); + if (!cros_settings->PrepareTrustedValues( + 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(); +} + +bool KioskModeSettings::is_initialized() const { + return is_initialized_; +} + +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() { +} + +} // namespace chromeos diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h new file mode 100644 index 0000000..c580254 --- /dev/null +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h @@ -0,0 +1,90 @@ +// 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. + +#ifndef CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_SETTINGS_H_ +#define CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_SETTINGS_H_ +#pragma once + +#include <string> + +#include "base/basictypes.h" +#include "base/callback_forward.h" +#include "base/time.h" + +namespace base { +template <typename T> struct DefaultLazyInstanceTraits; +} + +namespace { + +const int kMaxIdleLogoutTimeout = 600000; // ms = 600s = 10m. +const int kMinIdleLogoutTimeout = 5000; // ms = 5s. + +const int kMaxIdleLogoutWarningDuration = 60000; // ms = 60s. +const int kMinIdleLogoutWarningDuration = 1000; // ms = 1s. + +} // namespace + +namespace chromeos { + +// This class centralizes all our code to get KioskMode settings; since +// KioskMode interferes with normal operations all over Chrome, having all +// data about it pulled from a central location would make future +// refactorings easier. This class also handles getting trust for the policies +// via it's init method. +// +// Note: If Initialize is not called before the various Getters, we'll return +// invalid values. +class KioskModeSettings { + public: + // This method checks if Kiosk Mode is enabled or not. + virtual bool IsKioskModeEnabled(); + + static KioskModeSettings* Get(); + + // Initialize the settings; this will call the callback once trust is + // established with the policy settings provider. + virtual void Initialize(const base::Closure& notify_initialized); + virtual bool is_initialized() const; + + // The path to the screensaver extension. + virtual std::string GetScreensaverPath() const; + // The timeout before which we'll start showing the screensaver. + virtual base::TimeDelta GetScreensaverTimeout() const; + + // NOTE: The idle logout timeout is the time 'till' we show the idle dialog + // box. After we show the dialog box, it remains up for an 'additional' + // IdleLogoutWarningTimeout seconds, which adds to the total time before the + // user is logged out. + // The time to logout the user in on idle. + virtual base::TimeDelta GetIdleLogoutTimeout() const; + // The time to show the countdown timer for. + virtual base::TimeDelta GetIdleLogoutWarningDuration() const; + + protected: + // Needed here so MockKioskModeSettings can inherit from us. + KioskModeSettings(); + virtual ~KioskModeSettings(); + + private: + friend struct base::DefaultLazyInstanceTraits<KioskModeSettings>; + friend class KioskModeSettingsTest; + + bool is_initialized_; + + // Used for testing. + void set_initialized(bool value) { is_initialized_ = value; } + + std::string screensaver_id_; + std::string screensaver_path_; + base::TimeDelta screensaver_timeout_; + base::TimeDelta idle_logout_timeout_; + base::TimeDelta idle_logout_warning_duration_; + + DISALLOW_COPY_AND_ASSIGN(KioskModeSettings); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_SETTINGS_H_ diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings_unittest.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings_unittest.cc new file mode 100644 index 0000000..a26eb37 --- /dev/null +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings_unittest.cc @@ -0,0 +1,156 @@ +// 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 "base/bind.h" +#include "base/message_loop.h" +#include "base/values.h" +#include "chrome/browser/chromeos/cros_settings.h" +#include "chrome/browser/chromeos/cros_settings_names.h" +#include "chrome/browser/chromeos/stub_cros_settings_provider.h" +#include "content/test/test_browser_thread.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +const int kFudgeInt = 100; + +} + +namespace chromeos { + +class KioskModeSettingsTest : public testing::Test { + protected: + KioskModeSettingsTest() + : message_loop_(MessageLoop::TYPE_UI), + ui_thread_(content::BrowserThread::UI, &message_loop_), + file_thread_(content::BrowserThread::FILE, &message_loop_) { + CrosSettings* cros_settings = CrosSettings::Get(); + + // Remove the real DeviceSettingsProvider and replace it with a stub. + device_settings_provider_ = + cros_settings->GetProvider(chromeos::kReportDeviceVersionInfo); + EXPECT_TRUE(device_settings_provider_ != NULL); + EXPECT_TRUE( + cros_settings->RemoveSettingsProvider(device_settings_provider_)); + cros_settings->AddSettingsProvider(&stub_settings_provider_); + } + + ~KioskModeSettingsTest() { + // Restore the real DeviceSettingsProvider. + CrosSettings* cros_settings = CrosSettings::Get(); + EXPECT_TRUE( + cros_settings->RemoveSettingsProvider(&stub_settings_provider_)); + cros_settings->AddSettingsProvider(device_settings_provider_); + } + + virtual void SetUp() OVERRIDE { + if (!KioskModeSettings::Get()->is_initialized()) { + KioskModeSettings::Get()->Initialize( + base::Bind(&KioskModeSettingsTest::SetUp, + base::Unretained(this))); + return; + } + } + + virtual void TearDown() OVERRIDE { + KioskModeSettings::Get()->set_initialized(false); + } + + void ReInitialize() { + KioskModeSettings::Get()->Initialize( + base::Bind(&KioskModeSettingsTest::DoNothing, + base::Unretained(this))); + } + + void DisableKioskModeSettings() { + KioskModeSettings::Get()->set_initialized(false); + } + + void DoNothing() { + } + + MessageLoop message_loop_; + content::TestBrowserThread ui_thread_; + content::TestBrowserThread file_thread_; + + CrosSettingsProvider* device_settings_provider_; + StubCrosSettingsProvider stub_settings_provider_; +}; + +TEST_F(KioskModeSettingsTest, DisabledByDefault) { + EXPECT_FALSE(KioskModeSettings::Get()->IsKioskModeEnabled()); +} + +TEST_F(KioskModeSettingsTest, InstanceAvailable) { + EXPECT_TRUE(KioskModeSettings::Get() != NULL); + EXPECT_TRUE(KioskModeSettings::Get()->is_initialized()); +} + +TEST_F(KioskModeSettingsTest, CheckLogoutTimeoutBounds) { + chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); + + // Check if we go over max. + cros_settings->SetInteger(kIdleLogoutTimeout, + kMaxIdleLogoutTimeout + kFudgeInt); + ReInitialize(); + EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(), + base::TimeDelta::FromMilliseconds(kMaxIdleLogoutTimeout)); + + // Check if we go under min. + cros_settings->SetInteger(kIdleLogoutTimeout, + kMinIdleLogoutTimeout - kFudgeInt); + ReInitialize(); + EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(), + base::TimeDelta::FromMilliseconds(kMinIdleLogoutTimeout)); + + // Check if we are between max and min. + cros_settings->SetInteger(kIdleLogoutTimeout, + kMaxIdleLogoutTimeout - kFudgeInt); + ReInitialize(); + EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutTimeout(), + base::TimeDelta::FromMilliseconds( + kMaxIdleLogoutTimeout - kFudgeInt)); +} + +TEST_F(KioskModeSettingsTest, CheckLogoutWarningDurationBounds) { + chromeos::CrosSettings* cros_settings = chromeos::CrosSettings::Get(); + + // Check if we go over max. + cros_settings->SetInteger(kIdleLogoutWarningDuration, + kMaxIdleLogoutWarningDuration + kFudgeInt); + ReInitialize(); + EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(), + base::TimeDelta::FromMilliseconds(kMaxIdleLogoutWarningDuration)); + + // Check if we go under min. + cros_settings->SetInteger(kIdleLogoutWarningDuration, + kMinIdleLogoutWarningDuration - kFudgeInt); + ReInitialize(); + EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(), + base::TimeDelta::FromMilliseconds(kMinIdleLogoutWarningDuration)); + + // Check if we are between max and min. + cros_settings->SetInteger(kIdleLogoutWarningDuration, + kMaxIdleLogoutWarningDuration - kFudgeInt); + ReInitialize(); + EXPECT_EQ(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(), + base::TimeDelta::FromMilliseconds( + kMaxIdleLogoutWarningDuration - kFudgeInt)); +} + +TEST_F(KioskModeSettingsTest, UnitializedValues) { + DisableKioskModeSettings(); + + // Time delta initializes to '0' microseconds. + EXPECT_LT(KioskModeSettings::Get()->GetScreensaverTimeout(), + base::TimeDelta()); + EXPECT_LT(KioskModeSettings::Get()->GetIdleLogoutTimeout(), + base::TimeDelta()); + EXPECT_LT(KioskModeSettings::Get()->GetIdleLogoutWarningDuration(), + base::TimeDelta()); +} + +} // namespace chromeos diff --git a/chrome/browser/chromeos/login/webui_login_display_host.cc b/chrome/browser/chromeos/login/webui_login_display_host.cc index fdd9e85..5704e60 100644 --- a/chrome/browser/chromeos/login/webui_login_display_host.cc +++ b/chrome/browser/chromeos/login/webui_login_display_host.cc @@ -10,7 +10,7 @@ #include "base/command_line.h" #include "base/memory/scoped_ptr.h" #include "base/time.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/chromeos/login/oobe_display.h" #include "chrome/browser/chromeos/login/webui_login_display.h" #include "chrome/browser/chromeos/login/webui_login_view.h" @@ -130,7 +130,7 @@ void WebUILoginDisplayHost::StartSignInScreen() { BaseLoginDisplayHost::StartSignInScreen(); CHECK(webui_login_display_); GetOobeUI()->ShowSigninScreen(webui_login_display_); - if (chromeos::KioskModeHelper::IsKioskModeEnabled()) + if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) SetStatusAreaVisible(false); } diff --git a/chrome/browser/chromeos/power/power_button_controller_delegate_chromeos.cc b/chrome/browser/chromeos/power/power_button_controller_delegate_chromeos.cc index b894934..12ae439 100644 --- a/chrome/browser/chromeos/power/power_button_controller_delegate_chromeos.cc +++ b/chrome/browser/chromeos/power/power_button_controller_delegate_chromeos.cc @@ -7,7 +7,7 @@ #include "base/logging.h" #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" #include "chrome/browser/chromeos/dbus/power_manager_client.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/ui/browser_list.h" namespace chromeos { @@ -17,7 +17,7 @@ void PowerButtonControllerDelegateChromeos::RequestLockScreen() { // the power button, we instead want to log the user out. This seemed to // be the most acceptable replacement for the lock action of the power // button for Kiosk mode users. - if (KioskModeHelper::IsKioskModeEnabled()) { + if (KioskModeSettings::Get()->IsKioskModeEnabled()) { BrowserList::AttemptUserExit(); return; } diff --git a/chrome/browser/chromeos/stub_cros_settings_provider.cc b/chrome/browser/chromeos/stub_cros_settings_provider.cc index fd7a7e6..36b98ec 100644 --- a/chrome/browser/chromeos/stub_cros_settings_provider.cc +++ b/chrome/browser/chromeos/stub_cros_settings_provider.cc @@ -27,7 +27,12 @@ const char* kHandledSettings[] = { kReportDeviceBootMode, kSettingProxyEverywhere, kSignedDataRoamingEnabled, - kStatsReportingPref + kStatsReportingPref, + // Kiosk mode settings. + kIdleLogoutTimeout, + kIdleLogoutWarningDuration, + kScreenSaverExtensionId, + kScreenSaverTimeout }; } // namespace diff --git a/chrome/browser/chromeos/ui/idle_logout_dialog_view.cc b/chrome/browser/chromeos/ui/idle_logout_dialog_view.cc index 26de37b..40785ef 100644 --- a/chrome/browser/chromeos/ui/idle_logout_dialog_view.cc +++ b/chrome/browser/chromeos/ui/idle_logout_dialog_view.cc @@ -8,7 +8,7 @@ #include "base/bind_helpers.h" #include "base/time.h" #include "base/string_number_conversions.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/ui/browser_list.h" #include "grit/browser_resources.h" #include "grit/generated_resources.h" @@ -80,7 +80,7 @@ void IdleLogoutDialogView::DeleteDelegate() { // CallInit succeeded (or was never called) hence it didn't free // this pointer, free it here. - if (chromeos::KioskModeHelper::Get()->is_initialized()) + if (chromeos::KioskModeSettings::Get()->is_initialized()) delete instance_holder_; delete this; @@ -106,8 +106,8 @@ void IdleLogoutDialogView::CallInit(IdleLogoutDialogView** instance_holder) { } void IdleLogoutDialogView::Init() { - if (!chromeos::KioskModeHelper::Get()->is_initialized()) { - chromeos::KioskModeHelper::Get()->Initialize( + if (!chromeos::KioskModeSettings::Get()->is_initialized()) { + chromeos::KioskModeSettings::Get()->Initialize( base::Bind(&IdleLogoutDialogView::CallInit, instance_holder_)); return; } @@ -140,8 +140,8 @@ void IdleLogoutDialogView::Init() { void IdleLogoutDialogView::Show() { // Setup the countdown label before showing. - countdown_end_time_ = base::Time::Now() + base::TimeDelta::FromSeconds( - chromeos::KioskModeHelper::Get()->GetIdleLogoutWarningTimeout()); + countdown_end_time_ = base::Time::Now() + + chromeos::KioskModeSettings::Get()->GetIdleLogoutWarningDuration(); UpdateCountdownTimer(); views::Widget::CreateWindow(this); diff --git a/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc b/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc index b8e02a6..53642af 100644 --- a/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc +++ b/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc @@ -7,7 +7,7 @@ #include "base/bind.h" #include "base/logging.h" #include "base/memory/ref_counted.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" @@ -58,10 +58,10 @@ ScreensaverExtensionDialog::ScreensaverExtensionDialog() void ScreensaverExtensionDialog::LoadExtension() { // If the helper is not initialized, call us again when it is. // We can't get the screensaver path till the helper is ready. - if (!chromeos::KioskModeHelper::Get()->is_initialized()) { - chromeos::KioskModeHelper::Get()->Initialize( - base::Bind(&ScreensaverExtensionDialog::LoadExtension, - base::Unretained(this))); + if (!chromeos::KioskModeSettings::Get()->is_initialized()) { + chromeos::KioskModeSettings::Get()->Initialize( + base::Bind(&ScreensaverExtensionDialog::LoadExtension, + base::Unretained(this))); return; } @@ -70,14 +70,14 @@ void ScreensaverExtensionDialog::LoadExtension() { scoped_refptr<Extension> screensaver_extension = extension_file_util::LoadExtension( - FilePath(chromeos::KioskModeHelper::Get()->GetScreensaverPath()), + FilePath(chromeos::KioskModeSettings::Get()->GetScreensaverPath()), Extension::COMPONENT, Extension::NO_FLAGS, &error); if (!screensaver_extension) { - LOG(ERROR) << "Could not load screensaver extension from: " << - chromeos::KioskModeHelper::Get()->GetScreensaverPath(); + LOG(ERROR) << "Could not load screensaver extension from: " + << chromeos::KioskModeSettings::Get()->GetScreensaverPath(); return; } diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 3aa426d..f4cf46a 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc @@ -207,7 +207,7 @@ #include "chrome/browser/chromeos/boot_times_loader.h" #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" #include "chrome/browser/chromeos/dbus/power_manager_client.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #if defined(USE_AURA) #include "chrome/browser/extensions/api/terminal/terminal_extension_helper.h" #endif @@ -2507,7 +2507,7 @@ void Browser::OpenFileManager() { void Browser::LockScreen() { content::RecordAction(UserMetricsAction("LockScreen")); // Never lock the screen for kiosk mode. - if (chromeos::KioskModeHelper::IsKioskModeEnabled()) + if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) return; chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> NotifyScreenLockRequested(); diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index 2a666e8..1de50d3 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc @@ -11,7 +11,7 @@ #include "base/memory/ref_counted_memory.h" #include "base/values.h" #include "chrome/browser/browser_about_handler.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/chromeos/login/enrollment/enterprise_enrollment_screen_actor.h" #include "chrome/browser/chromeos/login/screen_locker.h" #include "chrome/browser/chromeos/login/user_manager.h" @@ -91,7 +91,7 @@ void OobeUIHTMLSource::StartDataRequest(const std::string& path, } std::string response; - if (chromeos::KioskModeHelper::Get()->IsKioskModeEnabled()) + if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) response = GetDataResource(IDR_DEMO_USER_LOGIN_HTML); else if (path.empty()) response = GetDataResource(IDR_OOBE_HTML); diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc index 4080c18..ef384de 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc @@ -21,7 +21,7 @@ #include "chrome/browser/chromeos/dbus/power_manager_client.h" #include "chrome/browser/chromeos/input_method/input_method_manager.h" #include "chrome/browser/chromeos/input_method/xkeyboard.h" -#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" #include "chrome/browser/chromeos/login/captive_portal_window_proxy.h" #include "chrome/browser/chromeos/login/screen_locker.h" #include "chrome/browser/chromeos/login/user.h" @@ -361,7 +361,7 @@ void SigninScreenHandler::GetLocalizedStrings( localized_strings->SetString("removeUser", l10n_util::GetStringUTF16(IDS_LOGIN_REMOVE)); - if (chromeos::KioskModeHelper::Get()->IsKioskModeEnabled()) { + if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) { localized_strings->SetString("demoLoginMessage", l10n_util::GetStringUTF16(IDS_KIOSK_MODE_LOGIN_MESSAGE)); } diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index f940f32..eecb312 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -589,12 +589,12 @@ 'browser/chromeos/input_method/xkeyboard.cc', 'browser/chromeos/input_method/xkeyboard.h', 'browser/chromeos/input_method/xkeyboard_data.h', - 'browser/chromeos/kiosk_mode/kiosk_mode_helper.cc', - 'browser/chromeos/kiosk_mode/kiosk_mode_helper.h', - 'browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc', - 'browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h', 'browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.cc', 'browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.h', + 'browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc', + 'browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h', + 'browser/chromeos/kiosk_mode/kiosk_mode_settings.cc', + 'browser/chromeos/kiosk_mode/kiosk_mode_settings.h', 'browser/chromeos/language_preferences.cc', 'browser/chromeos/language_preferences.h', 'browser/chromeos/legacy_window_manager/initial_browser_window_observer.cc', diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index c347323..81f85ba 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1344,6 +1344,7 @@ 'browser/chromeos/input_method/xkeyboard_unittest.cc', 'browser/chromeos/kiosk_mode/kiosk_mode_idle_logout_unittest.cc', 'browser/chromeos/kiosk_mode/kiosk_mode_screensaver_unittest.cc', + 'browser/chromeos/kiosk_mode/kiosk_mode_settings_unittest.cc', 'browser/chromeos/language_preferences_unittest.cc', 'browser/chromeos/login/authenticator_unittest.cc', 'browser/chromeos/login/cookie_fetcher_unittest.cc', |