| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h" | 5 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h" |
| 6 | 6 |
| 7 #include "ash/screensaver/screensaver_view.h" |
| 7 #include "base/bind.h" | 8 #include "base/bind.h" |
| 8 #include "base/callback.h" | 9 #include "base/callback.h" |
| 9 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| 10 #include "base/logging.h" | 11 #include "base/logging.h" |
| 11 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" | 12 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" |
| 12 #include "chrome/browser/chromeos/login/existing_user_controller.h" | 13 #include "chrome/browser/chromeos/login/existing_user_controller.h" |
| 13 #include "chrome/browser/chromeos/login/user_manager.h" | 14 #include "chrome/browser/chromeos/login/user_manager.h" |
| 14 #include "chrome/browser/chromeos/ui/screensaver_extension_dialog.h" | 15 #include "chrome/browser/extensions/extension_service.h" |
| 15 #include "chrome/browser/extensions/sandboxed_extension_unpacker.h" | 16 #include "chrome/browser/extensions/sandboxed_extension_unpacker.h" |
| 16 #include "chrome/common/chrome_notification_types.h" | 17 #include "chrome/common/chrome_notification_types.h" |
| 17 #include "chrome/common/extensions/extension.h" | 18 #include "chrome/common/extensions/extension.h" |
| 18 #include "chrome/common/extensions/extension_file_util.h" | 19 #include "chrome/common/extensions/extension_file_util.h" |
| 19 #include "chromeos/dbus/dbus_thread_manager.h" | 20 #include "chromeos/dbus/dbus_thread_manager.h" |
| 20 #include "content/public/browser/browser_thread.h" | 21 #include "content/public/browser/browser_thread.h" |
| 21 #include "content/public/browser/notification_service.h" | 22 #include "content/public/browser/notification_service.h" |
| 22 | 23 |
| 23 namespace chromeos { | 24 namespace chromeos { |
| 24 | 25 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 // We will register ourselves now and unregister if a user logs in. | 167 // We will register ourselves now and unregister if a user logs in. |
| 167 chromeos::PowerManagerClient* power_manager = | 168 chromeos::PowerManagerClient* power_manager = |
| 168 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); | 169 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); |
| 169 if (!power_manager->HasObserver(this)) | 170 if (!power_manager->HasObserver(this)) |
| 170 power_manager->AddObserver(this); | 171 power_manager->AddObserver(this); |
| 171 | 172 |
| 172 // We need to disappear and login the demo user if we go active. | 173 // We need to disappear and login the demo user if we go active. |
| 173 chromeos::DBusThreadManager::Get()-> | 174 chromeos::DBusThreadManager::Get()-> |
| 174 GetPowerManagerClient()->RequestActiveNotification(); | 175 GetPowerManagerClient()->RequestActiveNotification(); |
| 175 | 176 |
| 176 browser::ShowScreensaverDialog(extension); | 177 // Add the extension to the extension service and display the screensaver. |
| 178 Profile* default_profile = ProfileManager::GetDefaultProfile(); |
| 179 if (!default_profile->GetExtensionService()->AddExtension(extension)) { |
| 180 LOG(ERROR) << "Couldn't add screensaver extension to profile."; |
| 181 return; |
| 182 } |
| 183 |
| 184 ash::ShowScreensaver(extension->GetFullLaunchURL()); |
| 177 } | 185 } |
| 178 | 186 |
| 179 // NotificationObserver overrides: | 187 // NotificationObserver overrides: |
| 180 void KioskModeScreensaver::Observe( | 188 void KioskModeScreensaver::Observe( |
| 181 int type, | 189 int type, |
| 182 const content::NotificationSource& source, | 190 const content::NotificationSource& source, |
| 183 const content::NotificationDetails& details) { | 191 const content::NotificationDetails& details) { |
| 184 DCHECK_EQ(type, chrome::NOTIFICATION_SESSION_STARTED); | 192 DCHECK_EQ(type, chrome::NOTIFICATION_SESSION_STARTED); |
| 185 // User logged in, remove our observers, screensaver will be deactivated. | 193 // User logged in, remove our observers, screensaver will be deactivated. |
| 186 chromeos::PowerManagerClient* power_manager = | 194 chromeos::PowerManagerClient* power_manager = |
| 187 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); | 195 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); |
| 188 if (power_manager->HasObserver(this)) | 196 if (power_manager->HasObserver(this)) |
| 189 power_manager->RemoveObserver(this); | 197 power_manager->RemoveObserver(this); |
| 190 | 198 |
| 191 browser::CloseScreensaverDialog(); | 199 ash::CloseScreensaver(); |
| 192 ShutdownKioskModeScreensaver(); | 200 ShutdownKioskModeScreensaver(); |
| 193 } | 201 } |
| 194 | 202 |
| 195 void KioskModeScreensaver::ActiveNotify() { | 203 void KioskModeScreensaver::ActiveNotify() { |
| 196 // User is active, log us in. | 204 // User is active, log us in. |
| 197 ExistingUserController* controller = | 205 ExistingUserController* controller = |
| 198 ExistingUserController::current_controller(); | 206 ExistingUserController::current_controller(); |
| 199 | 207 |
| 200 if (controller) { | 208 if (controller) { |
| 201 // Logging in will shut us down, removing the screen saver. | 209 // Logging in will shut us down, removing the screen saver. |
| 202 controller->LoginAsDemoUser(); | 210 controller->LoginAsDemoUser(); |
| 203 } else { | 211 } else { |
| 204 // Remove the screensaver so the user can at least use the underlying | 212 // Remove the screensaver so the user can at least use the underlying |
| 205 // login screen to be able to log in. | 213 // login screen to be able to log in. |
| 206 browser::CloseScreensaverDialog(); | 214 ash::CloseScreensaver(); |
| 207 } | 215 } |
| 208 } | 216 } |
| 209 | 217 |
| 210 static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL; | 218 static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL; |
| 211 | 219 |
| 212 void InitializeKioskModeScreensaver() { | 220 void InitializeKioskModeScreensaver() { |
| 213 if (g_kiosk_mode_screensaver) { | 221 if (g_kiosk_mode_screensaver) { |
| 214 LOG(WARNING) << "Screensaver was already initialized"; | 222 LOG(WARNING) << "Screensaver was already initialized"; |
| 215 return; | 223 return; |
| 216 } | 224 } |
| 217 | 225 |
| 218 g_kiosk_mode_screensaver = new KioskModeScreensaver(); | 226 g_kiosk_mode_screensaver = new KioskModeScreensaver(); |
| 219 } | 227 } |
| 220 | 228 |
| 221 void ShutdownKioskModeScreensaver() { | 229 void ShutdownKioskModeScreensaver() { |
| 222 delete g_kiosk_mode_screensaver; | 230 delete g_kiosk_mode_screensaver; |
| 223 g_kiosk_mode_screensaver = NULL; | 231 g_kiosk_mode_screensaver = NULL; |
| 224 } | 232 } |
| 225 | 233 |
| 226 } // namespace chromeos | 234 } // namespace chromeos |
| OLD | NEW |