summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/generated_resources.grd3
-rw-r--r--chrome/browser/browser_resources.grd1
-rw-r--r--chrome/browser/chromeos/chrome_browser_main_chromeos.cc6
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.cc70
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h59
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc57
-rw-r--r--chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h3
-rw-r--r--chrome/browser/chromeos/login/webui_login_display.cc6
-rw-r--r--chrome/browser/chromeos/login/webui_login_display.h1
-rw-r--r--chrome/browser/chromeos/login/webui_login_display_host.cc3
-rw-r--r--chrome/browser/chromeos/ui/screensaver_extension_dialog.cc16
-rw-r--r--chrome/browser/resources/chromeos/login/demo_user_login.css41
-rw-r--r--chrome/browser/resources/chromeos/login/demo_user_login.html19
-rw-r--r--chrome/browser/resources/chromeos/login/demo_user_login.js25
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.cc7
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc15
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h6
-rw-r--r--chrome/chrome_browser.gypi2
18 files changed, 305 insertions, 35 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index dd533e3..c3a6d0a 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -12037,6 +12037,9 @@ Some features may be unavailable. Please check that the profile exists and you
<message name="IDS_LOGIN_REMOVE">
Remove
</message>
+ <message name="IDS_KIOSK_MODE_LOGIN_MESSAGE">
+ Click anywhere to start your experience
+ </message>
<message name="IDS_LOGIN_CHANGE_PHOTO">
Change picture
</message>
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
index e056ee4..def9d05 100644
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -156,6 +156,7 @@
<include name="IDR_KEYBOARD_OVERLAY_HTML" file="resources\chromeos\keyboard_overlay.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
<include name="IDR_KEYBOARD_OVERLAY_JS" file="resources\chromeos\keyboard_overlay.js" flattenhtml="true" type="BINDATA" />
<include name="IDR_LOGIN_HTML" file="resources\chromeos\login\login.html" flattenhtml="true" type="BINDATA" />
+ <include name="IDR_DEMO_USER_LOGIN_HTML" file="resources\chromeos\login\demo_user_login.html" flattenhtml="true" type="BINDATA" />
<include name="IDR_MENU_HTML" file="resources\chromeos\menu.html" flattenhtml="true" type="BINDATA" />
<include name="IDR_MOBILE_MANIFEST" file="resources\chromeos\mobile_app\manifest.json" type="BINDATA" />
<include name="IDR_MOBILE_SETUP_PAGE_HTML" file="resources\chromeos\mobile_setup.html" flattenhtml="true" type="BINDATA" />
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
index d710a69..579f7bc 100644
--- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
+++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -25,6 +25,7 @@
#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_screensaver.h"
#include "chrome/browser/chromeos/login/authenticator.h"
#include "chrome/browser/chromeos/login/login_utils.h"
@@ -201,7 +202,7 @@ void OptionallyRunChromeOSLoginManager(const CommandLine& parsed_command_line,
browser::ShowLoginWizard(first_screen, size);
- if (parsed_command_line.HasSwitch(switches::kEnableKioskMode))
+ if (chromeos::KioskModeHelper::IsKioskModeEnabled())
chromeos::InitializeKioskModeScreensaver();
} else if (parsed_command_line.HasSwitch(switches::kLoginUser) &&
parsed_command_line.HasSwitch(switches::kLoginPassword)) {
@@ -226,7 +227,8 @@ ChromeBrowserMainPartsChromeos::ChromeBrowserMainPartsChromeos(
}
ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() {
- chromeos::ShutdownKioskModeScreensaver();
+ if (chromeos::KioskModeHelper::IsKioskModeEnabled())
+ chromeos::ShutdownKioskModeScreensaver();
cryptohome::AsyncMethodCaller::Shutdown();
chromeos::imageburner::BurnManager::Shutdown();
chromeos::disks::DiskMountManager::Shutdown();
diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.cc
new file mode 100644
index 0000000..7d01028
--- /dev/null
+++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.cc
@@ -0,0 +1,70 @@
+// 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;
+
+} // 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;
+}
+
+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
new file mode 100644
index 0000000..ee64927
--- /dev/null
+++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h
@@ -0,0 +1,59 @@
+// 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_; }
+
+ // Getters for various Kiosk Mode values.
+ std::string GetScreensaverPath() const;
+ int64 GetScreensaverTimeout() 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_screensaver.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc
index bd943f4..cd84f96 100644
--- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc
+++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc
@@ -4,25 +4,37 @@
#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h"
+#include "base/bind.h"
#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/login/user_manager.h"
#include "chrome/browser/chromeos/ui/screensaver_extension_dialog.h"
#include "chrome/common/chrome_notification_types.h"
#include "content/public/browser/notification_service.h"
-namespace {
+namespace chromeos {
-// This (along with screensaver location) will change once we have the
-// retail mode enterprise policy set up.
-const int64 kScreensaverIdleTimeout = 60;
+KioskModeScreensaver::KioskModeScreensaver() {
+ if (chromeos::KioskModeHelper::Get()->is_initialized())
+ Setup();
+ else
+ chromeos::KioskModeHelper::Get()->Initialize(
+ base::Bind(&KioskModeScreensaver::Setup,
+ base::Unretained(this)));
-} // namespace
+}
-namespace chromeos {
+KioskModeScreensaver::~KioskModeScreensaver() {
+ chromeos::PowerManagerClient* power_manager =
+ chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
+ if (power_manager->HasObserver(this))
+ power_manager->RemoveObserver(this);
+}
+
+void KioskModeScreensaver::Setup() {
-KioskModeScreensaver::KioskModeScreensaver() {
// We should NOT be created if already logged in.
CHECK(!chromeos::UserManager::Get()->user_is_logged_in());
@@ -36,15 +48,9 @@ KioskModeScreensaver::KioskModeScreensaver() {
power_manager->AddObserver(this);
// Register for the next Idle for kScreensaverIdleTimeout event.
- chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
- RequestIdleNotification(kScreensaverIdleTimeout * 1000);
-}
-
-KioskModeScreensaver::~KioskModeScreensaver() {
- chromeos::PowerManagerClient* power_manager =
- chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
- if (power_manager->HasObserver(this))
- power_manager->RemoveObserver(this);
+ chromeos::DBusThreadManager::Get()->
+ GetPowerManagerClient()->RequestIdleNotification(
+ chromeos::KioskModeHelper::Get()->GetScreensaverTimeout() * 1000);
}
// NotificationObserver overrides:
@@ -63,23 +69,20 @@ void KioskModeScreensaver::Observe(
}
void KioskModeScreensaver::IdleNotify(int64 threshold) {
- // We're idle, next time we go active, we need to know so we can remove
- // the logout dialog if it's still up.
- chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
- RequestActiveNotification();
+ // We're idle; close screensaver when we go active.
+ chromeos::DBusThreadManager::Get()->
+ GetPowerManagerClient()->RequestActiveNotification();
browser::ShowScreensaverDialog();
}
void KioskModeScreensaver::ActiveNotify() {
- // Before anything else, close the logout dialog to prevent restart
browser::CloseScreensaverDialog();
- // Now that we're active, register a request for notification for
- // the next time we go idle for kScreensaverIdleTimeout seconds.
- chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->
- RequestIdleNotification(kScreensaverIdleTimeout * 1000);
-}
+ // Request notification for Idle so we can start up the screensaver.
+ chromeos::DBusThreadManager::Get()->
+ GetPowerManagerClient()->RequestIdleNotification(
+ chromeos::KioskModeHelper::Get()->GetScreensaverTimeout() * 1000);}
static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL;
@@ -93,7 +96,7 @@ void InitializeKioskModeScreensaver() {
}
void ShutdownKioskModeScreensaver() {
- if (g_kiosk_mode_screensaver) {
+ if (!g_kiosk_mode_screensaver) {
LOG(WARNING) << "Screensaver shutdown called when uninitialized.";
return;
}
diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h
index 9daeec0..2847f32 100644
--- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h
+++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h
@@ -19,6 +19,9 @@ class KioskModeScreensaver : public PowerManagerClient::Observer,
KioskModeScreensaver();
virtual ~KioskModeScreensaver();
+ // Really initialize screensaver when KioskModeHelper is initialized.
+ void Setup();
+
// NotificationObserver overrides:
virtual void Observe(int type,
const content::NotificationSource& source,
diff --git a/chrome/browser/chromeos/login/webui_login_display.cc b/chrome/browser/chromeos/login/webui_login_display.cc
index 5e5b3c9..cabf1b3 100644
--- a/chrome/browser/chromeos/login/webui_login_display.cc
+++ b/chrome/browser/chromeos/login/webui_login_display.cc
@@ -168,6 +168,12 @@ void WebUILoginDisplay::Login(const std::string& username,
delegate_->Login(username, password);
}
+void WebUILoginDisplay::LoginAsDemoUser() {
+ DCHECK(delegate_);
+ if (delegate_)
+ delegate_->LoginAsDemoUser();
+}
+
void WebUILoginDisplay::LoginAsGuest() {
DCHECK(delegate_);
if (delegate_)
diff --git a/chrome/browser/chromeos/login/webui_login_display.h b/chrome/browser/chromeos/login/webui_login_display.h
index 3607d39..3d72420 100644
--- a/chrome/browser/chromeos/login/webui_login_display.h
+++ b/chrome/browser/chromeos/login/webui_login_display.h
@@ -49,6 +49,7 @@ class WebUILoginDisplay : public LoginDisplay,
const std::string& password) OVERRIDE;
virtual void Login(const std::string& username,
const std::string& password) OVERRIDE;
+ virtual void LoginAsDemoUser() OVERRIDE;
virtual void LoginAsGuest() OVERRIDE;
virtual void Signout() OVERRIDE;
virtual void FixCaptivePortal() OVERRIDE;
diff --git a/chrome/browser/chromeos/login/webui_login_display_host.cc b/chrome/browser/chromeos/login/webui_login_display_host.cc
index b0a1b3a..16ed212 100644
--- a/chrome/browser/chromeos/login/webui_login_display_host.cc
+++ b/chrome/browser/chromeos/login/webui_login_display_host.cc
@@ -7,6 +7,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/login/oobe_display.h"
#include "chrome/browser/chromeos/login/webui_login_display.h"
#include "chrome/browser/chromeos/login/webui_login_view.h"
@@ -127,6 +128,8 @@ void WebUILoginDisplayHost::StartSignInScreen() {
BaseLoginDisplayHost::StartSignInScreen();
CHECK(webui_login_display_);
GetOobeUI()->ShowSigninScreen(webui_login_display_);
+ if (chromeos::KioskModeHelper::IsKioskModeEnabled())
+ SetStatusAreaVisible(false);
}
void WebUILoginDisplayHost::OnBrowserCreated() {
diff --git a/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc b/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc
index 8eb2879..b8e02a6 100644
--- a/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc
+++ b/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc
@@ -7,6 +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/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
@@ -55,21 +56,28 @@ 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)));
+ return;
+ }
+
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
std::string error;
- std::string extension_path = CommandLine::ForCurrentProcess()->
- GetSwitchValueASCII(switches::kKioskModeScreensaverPath);
scoped_refptr<Extension> screensaver_extension =
extension_file_util::LoadExtension(
- FilePath(extension_path),
+ FilePath(chromeos::KioskModeHelper::Get()->GetScreensaverPath()),
Extension::COMPONENT,
Extension::NO_FLAGS,
&error);
if (!screensaver_extension) {
LOG(ERROR) << "Could not load screensaver extension from: " <<
- extension_path;
+ chromeos::KioskModeHelper::Get()->GetScreensaverPath();
return;
}
diff --git a/chrome/browser/resources/chromeos/login/demo_user_login.css b/chrome/browser/resources/chromeos/login/demo_user_login.css
new file mode 100644
index 0000000..07fc214
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/demo_user_login.css
@@ -0,0 +1,41 @@
+/* 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.
+ */
+
+html,
+body {
+ height: 100%;
+ width: 100%;
+}
+
+body {
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+}
+
+#page {
+ -webkit-box-align: center;
+ -webkit-box-pack: center;
+ background: -webkit-linear-gradient(top, #dadada, white);
+ display: -webkit-box;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+}
+
+#logo-container {
+ text-align: center;
+}
+
+#logo {
+ width: 150px;
+}
+
+#demo-login-text {
+ font-family: 'Open Sans';
+ font-size: 18px;
+ font-weight: bold;
+ padding-top: 80px;
+}
diff --git a/chrome/browser/resources/chromeos/login/demo_user_login.html b/chrome/browser/resources/chromeos/login/demo_user_login.html
new file mode 100644
index 0000000..2bdd6bf
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/demo_user_login.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<html i18n-values="dir:textdirection">
+<head>
+<link rel="stylesheet" href="demo_user_login.css">
+<script src="chrome://resources/js/util.js"></script>
+<script src="demo_user_login.js"></script>
+</head>
+<body>
+ <div id="page">
+ <div id="logo-container">
+ <div>
+ <img id="logo" src="images/chrome_center_logo.gif">
+ </div>
+ <div id="demo-login-text" i18n-content="demoLoginMessage">
+ </div>
+ </div>
+ </div>
+</body>
+</html>
diff --git a/chrome/browser/resources/chromeos/login/demo_user_login.js b/chrome/browser/resources/chromeos/login/demo_user_login.js
new file mode 100644
index 0000000..974762e
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/demo_user_login.js
@@ -0,0 +1,25 @@
+// 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.
+
+/**
+ * @fileoverview Demo login UI.
+ */
+
+/**
+ * Handles a user clicking anywhere on the screen. This will log the demo user
+ * in. Yes, this actually _is the intention.
+ */
+onClick = function() {
+ chrome.send('launchDemoUser');
+};
+
+/**
+ * Initializes the click handler.
+ */
+initialize = function() {
+ document.addEventListener('click', onClick);
+};
+
+disableTextSelectAndDrag();
+document.addEventListener('DOMContentLoaded', initialize);
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
index 6aeb354..a109251 100644
--- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// 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.
@@ -11,6 +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/login/enrollment/enterprise_enrollment_screen_actor.h"
#include "chrome/browser/chromeos/login/screen_locker.h"
#include "chrome/browser/chromeos/login/user_manager.h"
@@ -90,7 +91,9 @@ void OobeUIHTMLSource::StartDataRequest(const std::string& path,
}
std::string response;
- if (path.empty())
+ if (chromeos::KioskModeHelper::Get()->IsKioskModeEnabled())
+ response = GetDataResource(IDR_DEMO_USER_LOGIN_HTML);
+ else if (path.empty())
response = GetDataResource(IDR_OOBE_HTML);
else if (path == kLoginPath)
response = GetDataResource(IDR_LOGIN_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 da1c798..7e23bf7 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -20,6 +20,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/login/screen_locker.h"
#include "chrome/browser/chromeos/login/user.h"
#include "chrome/browser/chromeos/login/webui_login_display.h"
@@ -327,6 +328,11 @@ void SigninScreenHandler::GetLocalizedStrings(
l10n_util::GetStringUTF16(IDS_OFFLINE_LOGIN_HTML));
localized_strings->SetString("removeUser",
l10n_util::GetStringUTF16(IDS_LOGIN_REMOVE));
+
+ if (chromeos::KioskModeHelper::Get()->IsKioskModeEnabled()) {
+ localized_strings->SetString("demoLoginMessage",
+ l10n_util::GetStringUTF16(IDS_KIOSK_MODE_LOGIN_MESSAGE));
+ }
}
void SigninScreenHandler::Show(bool oobe_ui) {
@@ -391,6 +397,9 @@ void SigninScreenHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("getUsers",
base::Bind(&SigninScreenHandler::HandleGetUsers,
base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("launchDemoUser",
+ base::Bind(&SigninScreenHandler::HandleLaunchDemoUser,
+ base::Unretained(this)));
web_ui()->RegisterMessageCallback("launchIncognito",
base::Bind(&SigninScreenHandler::HandleLaunchIncognito,
base::Unretained(this)));
@@ -651,6 +660,12 @@ void SigninScreenHandler::HandleAuthenticateUser(const base::ListValue* args) {
delegate_->Login(username, password);
}
+void SigninScreenHandler::HandleLaunchDemoUser(const base::ListValue* args) {
+ if (!delegate_)
+ return;
+ delegate_->LoginAsDemoUser();
+}
+
void SigninScreenHandler::HandleLaunchIncognito(const base::ListValue* args) {
if (!delegate_)
return;
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
index 4f589db..271f935 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
@@ -63,6 +63,9 @@ class SigninScreenHandlerDelegate {
virtual void Login(const std::string& username,
const std::string& password) = 0;
+ // Sign in into a demo user session.
+ virtual void LoginAsDemoUser() = 0;
+
// Sign in into Guest session.
virtual void LoginAsGuest() = 0;
@@ -183,6 +186,9 @@ class SigninScreenHandler : public BaseScreenHandler,
// Handles authentication request when signing in an existing user.
void HandleAuthenticateUser(const base::ListValue* args);
+ // Handles entering as the demo user.
+ void HandleLaunchDemoUser(const base::ListValue* args);
+
// Handles entering bwsi mode request.
void HandleLaunchIncognito(const base::ListValue* args);
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 961f7b3..02241d4 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -558,6 +558,8 @@
'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/language_preferences.cc',