Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc

Issue 10191010: Re-implement the screensaver to use WebView instead of ExtensionDialogHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ut fix. Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
25 typedef base::Callback<void( 26 typedef base::Callback<void(
26 scoped_refptr<Extension>, 27 scoped_refptr<Extension>,
28 Profile*,
27 const FilePath&)> UnpackCallback; 29 const FilePath&)> UnpackCallback;
28 30
29 class ScreensaverUnpackerClient : public SandboxedExtensionUnpackerClient { 31 class ScreensaverUnpackerClient : public SandboxedExtensionUnpackerClient {
30 public: 32 public:
31 explicit ScreensaverUnpackerClient(const UnpackCallback& unpacker_callback) 33 explicit ScreensaverUnpackerClient(const UnpackCallback& unpacker_callback)
32 : unpack_callback_(unpacker_callback) {} 34 : unpack_callback_(unpacker_callback) {}
33 35
34 void OnUnpackSuccess(const FilePath& temp_dir, 36 void OnUnpackSuccess(const FilePath& temp_dir,
35 const FilePath& extension_root, 37 const FilePath& extension_root,
36 const base::DictionaryValue* original_manifest, 38 const base::DictionaryValue* original_manifest,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 extension_file_util::LoadExtension(screensaver_extension_path, 77 extension_file_util::LoadExtension(screensaver_extension_path,
76 Extension::COMPONENT, 78 Extension::COMPONENT,
77 Extension::NO_FLAGS, 79 Extension::NO_FLAGS,
78 &error); 80 &error);
79 if (!screensaver_extension) { 81 if (!screensaver_extension) {
80 LOG(ERROR) << "Could not load screensaver extension from: " 82 LOG(ERROR) << "Could not load screensaver extension from: "
81 << screensaver_extension_path.value() << " due to: " << error; 83 << screensaver_extension_path.value() << " due to: " << error;
82 return; 84 return;
83 } 85 }
84 86
87 Profile* default_profile = ProfileManager::GetDefaultProfile();
85 content::BrowserThread::PostTask( 88 content::BrowserThread::PostTask(
86 content::BrowserThread::UI, 89 content::BrowserThread::UI,
87 FROM_HERE, 90 FROM_HERE,
88 base::Bind( 91 base::Bind(
89 unpack_callback_, 92 unpack_callback_,
90 screensaver_extension, 93 screensaver_extension,
94 default_profile,
91 extension_base_path)); 95 extension_base_path));
92 } 96 }
93 97
94 KioskModeScreensaver::KioskModeScreensaver() 98 KioskModeScreensaver::KioskModeScreensaver()
95 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 99 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
96 chromeos::KioskModeSettings* kiosk_mode_settings = 100 chromeos::KioskModeSettings* kiosk_mode_settings =
97 chromeos::KioskModeSettings::Get(); 101 chromeos::KioskModeSettings::Get();
98 102
99 if (kiosk_mode_settings->is_initialized()) { 103 if (kiosk_mode_settings->is_initialized()) {
100 GetScreensaverCrxPath(); 104 GetScreensaverCrxPath();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 // Fire off the unpacker on the file thread; don't need it to return. 149 // Fire off the unpacker on the file thread; don't need it to return.
146 content::BrowserThread::PostTask( 150 content::BrowserThread::PostTask(
147 content::BrowserThread::FILE, 151 content::BrowserThread::FILE,
148 FROM_HERE, 152 FROM_HERE,
149 base::Bind( 153 base::Bind(
150 &SandboxedExtensionUnpacker::Start, screensaver_unpacker.get())); 154 &SandboxedExtensionUnpacker::Start, screensaver_unpacker.get()));
151 } 155 }
152 156
153 void KioskModeScreensaver::SetupScreensaver( 157 void KioskModeScreensaver::SetupScreensaver(
154 scoped_refptr<Extension> extension, 158 scoped_refptr<Extension> extension,
159 Profile* default_profile,
155 const FilePath& extension_base_path) { 160 const FilePath& extension_base_path) {
156 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 161 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
157 extension_base_path_ = extension_base_path; 162 extension_base_path_ = extension_base_path;
158 163
159 // If the user is already logged in, don't need to display the screensaver. 164 // If the user is already logged in, don't need to display the screensaver.
160 if (chromeos::UserManager::Get()->IsUserLoggedIn()) 165 if (chromeos::UserManager::Get()->IsUserLoggedIn())
161 return; 166 return;
162 167
163 registrar_.Add(this, chrome::NOTIFICATION_SESSION_STARTED, 168 registrar_.Add(this, chrome::NOTIFICATION_SESSION_STARTED,
164 content::NotificationService::AllSources()); 169 content::NotificationService::AllSources());
165 170
166 // We will register ourselves now and unregister if a user logs in. 171 // We will register ourselves now and unregister if a user logs in.
167 chromeos::PowerManagerClient* power_manager = 172 chromeos::PowerManagerClient* power_manager =
168 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); 173 chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
169 if (!power_manager->HasObserver(this)) 174 if (!power_manager->HasObserver(this))
170 power_manager->AddObserver(this); 175 power_manager->AddObserver(this);
171 176
172 // We need to disappear and login the demo user if we go active. 177 // We need to disappear and login the demo user if we go active.
173 chromeos::DBusThreadManager::Get()-> 178 chromeos::DBusThreadManager::Get()->
174 GetPowerManagerClient()->RequestActiveNotification(); 179 GetPowerManagerClient()->RequestActiveNotification();
175 180
176 browser::ShowScreensaverDialog(extension); 181 // Add the extension to the extension service and display the screensaver.
182 if (default_profile) {
183 default_profile->GetExtensionService()->AddExtension(extension);
184 ash::ShowScreensaver(extension->GetFullLaunchURL());
185 } else {
186 LOG(ERROR) << "Couldn't get default profile. Unable to load screensaver!";
187 }
177 } 188 }
178 189
179 // NotificationObserver overrides: 190 // NotificationObserver overrides:
180 void KioskModeScreensaver::Observe( 191 void KioskModeScreensaver::Observe(
181 int type, 192 int type,
182 const content::NotificationSource& source, 193 const content::NotificationSource& source,
183 const content::NotificationDetails& details) { 194 const content::NotificationDetails& details) {
184 DCHECK_EQ(type, chrome::NOTIFICATION_SESSION_STARTED); 195 DCHECK_EQ(type, chrome::NOTIFICATION_SESSION_STARTED);
185 // User logged in, remove our observers, screensaver will be deactivated. 196 // User logged in, remove our observers, screensaver will be deactivated.
186 chromeos::PowerManagerClient* power_manager = 197 chromeos::PowerManagerClient* power_manager =
187 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); 198 chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
188 if (power_manager->HasObserver(this)) 199 if (power_manager->HasObserver(this))
189 power_manager->RemoveObserver(this); 200 power_manager->RemoveObserver(this);
190 201
191 browser::CloseScreensaverDialog(); 202 ash::CloseScreensaver();
192 ShutdownKioskModeScreensaver(); 203 ShutdownKioskModeScreensaver();
193 } 204 }
194 205
195 void KioskModeScreensaver::ActiveNotify() { 206 void KioskModeScreensaver::ActiveNotify() {
196 // User is active, log us in. 207 // User is active, log us in.
197 ExistingUserController* controller = 208 ExistingUserController* controller =
198 ExistingUserController::current_controller(); 209 ExistingUserController::current_controller();
199 210
200 if (controller) { 211 if (controller) {
201 // Logging in will shut us down, removing the screen saver. 212 // Logging in will shut us down, removing the screen saver.
202 controller->LoginAsDemoUser(); 213 controller->LoginAsDemoUser();
203 } else { 214 } else {
204 // Remove the screensaver so the user can at least use the underlying 215 // Remove the screensaver so the user can at least use the underlying
205 // login screen to be able to log in. 216 // login screen to be able to log in.
206 browser::CloseScreensaverDialog(); 217 ash::CloseScreensaver();
207 } 218 }
208 } 219 }
209 220
210 static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL; 221 static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL;
211 222
212 void InitializeKioskModeScreensaver() { 223 void InitializeKioskModeScreensaver() {
213 if (g_kiosk_mode_screensaver) { 224 if (g_kiosk_mode_screensaver) {
214 LOG(WARNING) << "Screensaver was already initialized"; 225 LOG(WARNING) << "Screensaver was already initialized";
215 return; 226 return;
216 } 227 }
217 228
218 g_kiosk_mode_screensaver = new KioskModeScreensaver(); 229 g_kiosk_mode_screensaver = new KioskModeScreensaver();
219 } 230 }
220 231
221 void ShutdownKioskModeScreensaver() { 232 void ShutdownKioskModeScreensaver() {
222 delete g_kiosk_mode_screensaver; 233 delete g_kiosk_mode_screensaver;
223 g_kiosk_mode_screensaver = NULL; 234 g_kiosk_mode_screensaver = NULL;
224 } 235 }
225 236
226 } // namespace chromeos 237 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698