Index: chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc |
diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc |
index 282e696c41bf90ec795f6f6f5121706f96faf0da..9100f7e431864f6d8a0a1b168804b5c7464dc5be 100644 |
--- a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc |
+++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc |
@@ -13,7 +13,9 @@ |
#include "base/logging.h" |
#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" |
#include "chrome/browser/chromeos/login/existing_user_controller.h" |
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
xiyuan
2012/10/24 22:03:19
nit: sort alphabetically
rkc
2012/10/24 22:05:58
Done.
|
#include "chrome/browser/chromeos/login/user_manager.h" |
+#include "chrome/browser/chromeos/login/webui_login_display_host.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/sandboxed_unpacker.h" |
#include "chrome/common/chrome_notification_types.h" |
@@ -130,7 +132,6 @@ KioskModeScreensaver::~KioskModeScreensaver() { |
if (ash::Shell::GetInstance() && |
ash::Shell::GetInstance()->user_activity_detector()) |
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this); |
- registrar_.RemoveAll(); |
} |
void KioskModeScreensaver::GetScreensaverCrxPath() { |
@@ -178,9 +179,6 @@ void KioskModeScreensaver::SetupScreensaver( |
if (chromeos::UserManager::Get()->IsUserLoggedIn()) |
return; |
- // Add our observers for login and user active. |
- registrar_.Add(this, chrome::NOTIFICATION_SESSION_STARTED, |
- content::NotificationService::AllSources()); |
ash::Shell::GetInstance()->user_activity_detector()->AddObserver(this); |
Profile* default_profile = ProfileManager::GetDefaultProfile(); |
@@ -194,37 +192,32 @@ void KioskModeScreensaver::SetupScreensaver( |
} |
} |
-// NotificationObserver overrides: |
-void KioskModeScreensaver::Observe( |
- int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- DCHECK_EQ(type, chrome::NOTIFICATION_SESSION_STARTED); |
- |
- registrar_.RemoveAll(); |
- |
- ash::CloseScreensaver(); |
- ShutdownKioskModeScreensaver(); |
-} |
- |
void KioskModeScreensaver::OnUserActivity() { |
// We don't want to handle further user notifications; we'll either login |
// the user and close out or or at least close the screensaver. |
ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver(this); |
- // User is active, log us in. |
+ // Find the retail mode login page. |
+ CHECK(WebUILoginDisplayHost::default_host()); |
+ WebUILoginDisplayHost* webui_host = |
+ static_cast<WebUILoginDisplayHost*>( |
+ WebUILoginDisplayHost::default_host()); |
+ OobeUI* oobe_ui = webui_host->GetOobeUI(); |
+ |
+ // Show the login spinner. |
+ CHECK(oobe_ui); |
+ oobe_ui->ShowRetailModeLoginSpinner(); |
+ |
+ // Close the screensaver, our login spinner is already showing. |
+ ash::CloseScreensaver(); |
+ |
+ // Log us in. |
ExistingUserController* controller = |
ExistingUserController::current_controller(); |
+ CHECK(controller); |
+ controller->LoginAsDemoUser(); |
- if (controller) { |
- // Logging in will shut us down and remove the screen saver. |
- controller->LoginAsDemoUser(); |
- } else { |
- // Remove the screensaver so the user can at least use the underlying |
- // login screen to be able to log in. |
- ash::CloseScreensaver(); |
- ShutdownKioskModeScreensaver(); |
- } |
+ ShutdownKioskModeScreensaver(); |
} |
static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL; |
@@ -239,6 +232,11 @@ void InitializeKioskModeScreensaver() { |
} |
void ShutdownKioskModeScreensaver() { |
+ if (ash::Shell::GetInstance()->user_activity_detector()->HasObserver( |
+ g_kiosk_mode_screensaver)) |
+ ash::Shell::GetInstance()->user_activity_detector()->RemoveObserver( |
+ g_kiosk_mode_screensaver); |
xiyuan
2012/10/24 22:03:19
There is similar code in KioskModeScreensaver's dt
rkc
2012/10/24 22:05:58
Crap, didn't realize this was already being handle
|
+ |
delete g_kiosk_mode_screensaver; |
g_kiosk_mode_screensaver = NULL; |
} |