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 |