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

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

Issue 9695029: Change the login flow for kiosk mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 9 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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" 10 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
11 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h" 11 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_helper.h"
12 #include "chrome/browser/chromeos/login/existing_user_controller.h"
12 #include "chrome/browser/chromeos/login/user_manager.h" 13 #include "chrome/browser/chromeos/login/user_manager.h"
13 #include "chrome/browser/chromeos/ui/screensaver_extension_dialog.h" 14 #include "chrome/browser/chromeos/ui/screensaver_extension_dialog.h"
14 #include "chrome/common/chrome_notification_types.h" 15 #include "chrome/common/chrome_notification_types.h"
15 #include "content/public/browser/notification_service.h" 16 #include "content/public/browser/notification_service.h"
16 17
17 namespace chromeos { 18 namespace chromeos {
18 19
19 KioskModeScreensaver::KioskModeScreensaver() { 20 KioskModeScreensaver::KioskModeScreensaver() {
20 if (chromeos::KioskModeHelper::Get()->is_initialized()) 21 if (chromeos::KioskModeHelper::Get()->is_initialized())
21 Setup(); 22 Setup();
22 else 23 else
23 chromeos::KioskModeHelper::Get()->Initialize( 24 chromeos::KioskModeHelper::Get()->Initialize(
24 base::Bind(&KioskModeScreensaver::Setup, 25 base::Bind(&KioskModeScreensaver::Setup,
25 base::Unretained(this))); 26 base::Unretained(this)));
26 27
27 } 28 }
28 29
29 KioskModeScreensaver::~KioskModeScreensaver() { 30 KioskModeScreensaver::~KioskModeScreensaver() {
30 chromeos::PowerManagerClient* power_manager = 31 chromeos::PowerManagerClient* power_manager =
31 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); 32 chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
32 if (power_manager->HasObserver(this)) 33 if (power_manager->HasObserver(this))
33 power_manager->RemoveObserver(this); 34 power_manager->RemoveObserver(this);
34 } 35 }
35 36
36 void KioskModeScreensaver::Setup() { 37 void KioskModeScreensaver::Setup() {
37 // We should NOT be created if already logged in. 38 // We should NOT be created if already logged in.
38 CHECK(!chromeos::UserManager::Get()->IsUserLoggedIn()); 39 CHECK(!chromeos::UserManager::Get()->IsUserLoggedIn());
39 40
40 registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_CHANGED, 41 registrar_.Add(this, chrome::NOTIFICATION_SESSION_STARTED,
41 content::NotificationService::AllSources()); 42 content::NotificationService::AllSources());
42 43
43 // We will register ourselves now and unregister if a user logs in. 44 // We will register ourselves now and unregister if a user logs in.
44 chromeos::PowerManagerClient* power_manager = 45 chromeos::PowerManagerClient* power_manager =
45 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); 46 chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
46 if (!power_manager->HasObserver(this)) 47 if (!power_manager->HasObserver(this))
47 power_manager->AddObserver(this); 48 power_manager->AddObserver(this);
48 49
49 // Register for the next Idle for kScreensaverIdleTimeout event. 50 // We need to disappear and login the demo user if we go active.
50 chromeos::DBusThreadManager::Get()-> 51 chromeos::DBusThreadManager::Get()->
51 GetPowerManagerClient()->RequestIdleNotification( 52 GetPowerManagerClient()->RequestActiveNotification();
52 chromeos::KioskModeHelper::Get()->GetScreensaverTimeout() * 1000); 53
54 browser::ShowScreensaverDialog();
53 } 55 }
54 56
55 // NotificationObserver overrides: 57 // NotificationObserver overrides:
56 void KioskModeScreensaver::Observe( 58 void KioskModeScreensaver::Observe(
57 int type, 59 int type,
58 const content::NotificationSource& source, 60 const content::NotificationSource& source,
59 const content::NotificationDetails& details) { 61 const content::NotificationDetails& details) {
60 DCHECK_EQ(type, chrome::NOTIFICATION_LOGIN_USER_CHANGED); 62 DCHECK_EQ(type, chrome::NOTIFICATION_SESSION_STARTED);
61 // User logged in, remove our observers, screensaver will be deactivated. 63 // User logged in, remove our observers, screensaver will be deactivated.
62 chromeos::PowerManagerClient* power_manager = 64 chromeos::PowerManagerClient* power_manager =
63 chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); 65 chromeos::DBusThreadManager::Get()->GetPowerManagerClient();
64 if (power_manager->HasObserver(this)) 66 if (power_manager->HasObserver(this))
65 power_manager->RemoveObserver(this); 67 power_manager->RemoveObserver(this);
66 68
69 browser::CloseScreensaverDialog();
67 ShutdownKioskModeScreensaver(); 70 ShutdownKioskModeScreensaver();
68 } 71 }
69 72
70 void KioskModeScreensaver::IdleNotify(int64 threshold) { 73 void KioskModeScreensaver::ActiveNotify() {
71 // We're idle; close screensaver when we go active. 74 // User is active, log us in.
72 chromeos::DBusThreadManager::Get()-> 75 ExistingUserController* controller =
73 GetPowerManagerClient()->RequestActiveNotification(); 76 ExistingUserController::current_controller();
74 77
75 browser::ShowScreensaverDialog(); 78 if (controller)
79 // Logging in will shut us down, removing the screen saver.
80 controller->LoginAsDemoUser();
81 else
82 // Remove the screensaver so the user can at least use the underlying
83 // login screen to be able to log in.
84 browser::CloseScreensaverDialog();
76 } 85 }
77 86
78 void KioskModeScreensaver::ActiveNotify() {
79 browser::CloseScreensaverDialog();
80
81 // Request notification for Idle so we can start up the screensaver.
82 chromeos::DBusThreadManager::Get()->
83 GetPowerManagerClient()->RequestIdleNotification(
84 chromeos::KioskModeHelper::Get()->GetScreensaverTimeout() * 1000);}
85
86 static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL; 87 static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL;
87 88
88 void InitializeKioskModeScreensaver() { 89 void InitializeKioskModeScreensaver() {
89 if (g_kiosk_mode_screensaver) { 90 if (g_kiosk_mode_screensaver) {
90 LOG(WARNING) << "Screensaver was already initialized"; 91 LOG(WARNING) << "Screensaver was already initialized";
91 return; 92 return;
92 } 93 }
93 94
94 g_kiosk_mode_screensaver = new KioskModeScreensaver(); 95 g_kiosk_mode_screensaver = new KioskModeScreensaver();
95 } 96 }
96 97
97 void ShutdownKioskModeScreensaver() { 98 void ShutdownKioskModeScreensaver() {
98 delete g_kiosk_mode_screensaver; 99 delete g_kiosk_mode_screensaver;
99 g_kiosk_mode_screensaver = NULL; 100 g_kiosk_mode_screensaver = NULL;
100 } 101 }
101 102
102 } // namespace chromeos 103 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698