Chromium Code Reviews| 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; |
| } |