summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.cc8
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.cc85
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h64
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_idle_logout.cc17
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc16
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.cc125
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h90
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings_unittest.cc156
-rw-r--r--chrome/browser/chromeos/login/webui_login_display_host.cc4
-rw-r--r--chrome/browser/chromeos/power/power_button_controller_delegate_chromeos.cc4
-rw-r--r--chrome/browser/chromeos/stub_cros_settings_provider.cc7
-rw-r--r--chrome/browser/chromeos/ui/idle_logout_dialog_view.cc12
-rw-r--r--chrome/browser/chromeos/ui/screensaver_extension_dialog.cc16
-rw-r--r--chrome/browser/ui/browser.cc4
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.cc4
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc4
-rw-r--r--chrome/chrome_browser.gypi8
-rw-r--r--chrome/chrome_tests.gypi1
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',