• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/chromeos/login/app_launch_signin_screen.h"
6 
7 #include "base/values.h"
8 #include "chrome/browser/chromeos/login/help_app_launcher.h"
9 #include "chrome/browser/chromeos/login/login_utils.h"
10 #include "chrome/browser/chromeos/login/screens/user_selection_screen.h"
11 #include "chrome/browser/signin/screenlock_bridge.h"
12 #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
13 #include "content/public/browser/browser_thread.h"
14 #include "content/public/browser/web_ui.h"
15 #include "grit/generated_resources.h"
16 #include "ui/base/l10n/l10n_util.h"
17 
18 namespace chromeos {
19 
20 UserManager* AppLaunchSigninScreen::test_user_manager_ = NULL;
21 
AppLaunchSigninScreen(OobeUI * oobe_ui,Delegate * delegate)22 AppLaunchSigninScreen::AppLaunchSigninScreen(
23     OobeUI* oobe_ui, Delegate* delegate)
24     : oobe_ui_(oobe_ui),
25       delegate_(delegate),
26       webui_handler_(NULL) {
27 }
28 
~AppLaunchSigninScreen()29 AppLaunchSigninScreen::~AppLaunchSigninScreen() {
30   oobe_ui_->ResetSigninScreenHandlerDelegate();
31 }
32 
Show()33 void AppLaunchSigninScreen::Show() {
34   InitOwnerUserList();
35   oobe_ui_->web_ui()->CallJavascriptFunction(
36       "login.AccountPickerScreen.setShouldShowApps",
37       base::FundamentalValue(false));
38   oobe_ui_->ShowSigninScreen(LoginScreenContext(), this, NULL);
39 }
40 
InitOwnerUserList()41 void AppLaunchSigninScreen::InitOwnerUserList() {
42   UserManager* user_manager = GetUserManager();
43   const std::string& owner_email = user_manager->GetOwnerEmail();
44   const UserList& all_users = user_manager->GetUsers();
45 
46   owner_user_list_.clear();
47   for (UserList::const_iterator it = all_users.begin();
48        it != all_users.end();
49        ++it) {
50     User* user = *it;
51     if (user->email() == owner_email) {
52       owner_user_list_.push_back(user);
53       break;
54     }
55   }
56 }
57 
58 // static
SetUserManagerForTesting(UserManager * user_manager)59 void AppLaunchSigninScreen::SetUserManagerForTesting(
60     UserManager* user_manager) {
61   test_user_manager_ = user_manager;
62 }
63 
GetUserManager()64 UserManager* AppLaunchSigninScreen::GetUserManager() {
65   return test_user_manager_ ? test_user_manager_ : UserManager::Get();
66 }
67 
CancelPasswordChangedFlow()68 void AppLaunchSigninScreen::CancelPasswordChangedFlow() {
69   NOTREACHED();
70 }
71 
CancelUserAdding()72 void AppLaunchSigninScreen::CancelUserAdding() {
73   NOTREACHED();
74 }
75 
CreateAccount()76 void AppLaunchSigninScreen::CreateAccount() {
77   NOTREACHED();
78 }
79 
CompleteLogin(const UserContext & user_context)80 void AppLaunchSigninScreen::CompleteLogin(const UserContext& user_context) {
81   NOTREACHED();
82 }
83 
Login(const UserContext & user_context)84 void AppLaunchSigninScreen::Login(const UserContext& user_context) {
85   // Note: LoginUtils::CreateAuthenticator doesn't necessarily create
86   // a new Authenticator object, and could reuse an existing one.
87   authenticator_ = LoginUtils::Get()->CreateAuthenticator(this);
88   content::BrowserThread::PostTask(
89       content::BrowserThread::UI, FROM_HERE,
90       base::Bind(&Authenticator::AuthenticateToUnlock,
91                  authenticator_.get(),
92                  user_context));
93 }
94 
LoginAsRetailModeUser()95 void AppLaunchSigninScreen::LoginAsRetailModeUser() {
96   NOTREACHED();
97 }
98 
LoginAsGuest()99 void AppLaunchSigninScreen::LoginAsGuest() {
100   NOTREACHED();
101 }
102 
MigrateUserData(const std::string & old_password)103 void AppLaunchSigninScreen::MigrateUserData(const std::string& old_password) {
104   NOTREACHED();
105 }
106 
LoginAsPublicAccount(const std::string & username)107 void AppLaunchSigninScreen::LoginAsPublicAccount(const std::string& username) {
108   NOTREACHED();
109 }
110 
LoadWallpaper(const std::string & username)111 void AppLaunchSigninScreen::LoadWallpaper(const std::string& username) {
112 }
113 
LoadSigninWallpaper()114 void AppLaunchSigninScreen::LoadSigninWallpaper() {
115 }
116 
OnSigninScreenReady()117 void AppLaunchSigninScreen::OnSigninScreenReady() {
118 }
119 
RemoveUser(const std::string & username)120 void AppLaunchSigninScreen::RemoveUser(const std::string& username) {
121   NOTREACHED();
122 }
123 
ResyncUserData()124 void AppLaunchSigninScreen::ResyncUserData() {
125   NOTREACHED();
126 }
127 
ShowEnterpriseEnrollmentScreen()128 void AppLaunchSigninScreen::ShowEnterpriseEnrollmentScreen() {
129   NOTREACHED();
130 }
131 
ShowKioskEnableScreen()132 void AppLaunchSigninScreen::ShowKioskEnableScreen() {
133   NOTREACHED();
134 }
135 
ShowKioskAutolaunchScreen()136 void AppLaunchSigninScreen::ShowKioskAutolaunchScreen() {
137   NOTREACHED();
138 }
139 
ShowWrongHWIDScreen()140 void AppLaunchSigninScreen::ShowWrongHWIDScreen() {
141   NOTREACHED();
142 }
143 
SetWebUIHandler(LoginDisplayWebUIHandler * webui_handler)144 void AppLaunchSigninScreen::SetWebUIHandler(
145     LoginDisplayWebUIHandler* webui_handler) {
146   webui_handler_ = webui_handler;
147 }
148 
ShowSigninScreenForCreds(const std::string & username,const std::string & password)149 void AppLaunchSigninScreen::ShowSigninScreenForCreds(
150     const std::string& username,
151     const std::string& password) {
152   NOTREACHED();
153 }
154 
GetUsers() const155 const UserList& AppLaunchSigninScreen::GetUsers() const {
156   if (test_user_manager_) {
157     return test_user_manager_->GetUsers();
158   }
159   return owner_user_list_;
160 }
161 
IsShowGuest() const162 bool AppLaunchSigninScreen::IsShowGuest() const {
163   return false;
164 }
165 
IsShowUsers() const166 bool AppLaunchSigninScreen::IsShowUsers() const {
167   return true;
168 }
169 
IsSigninInProgress() const170 bool AppLaunchSigninScreen::IsSigninInProgress() const {
171   // Return true to suppress network processing in the signin screen.
172   return true;
173 }
174 
IsUserSigninCompleted() const175 bool AppLaunchSigninScreen::IsUserSigninCompleted() const {
176   return false;
177 }
178 
SetDisplayEmail(const std::string & email)179 void AppLaunchSigninScreen::SetDisplayEmail(const std::string& email) {
180   return;
181 }
182 
Signout()183 void AppLaunchSigninScreen::Signout() {
184   NOTREACHED();
185 }
186 
LoginAsKioskApp(const std::string & app_id,bool diagnostic_mode)187 void AppLaunchSigninScreen::LoginAsKioskApp(const std::string& app_id,
188                                             bool diagnostic_mode) {
189   NOTREACHED();
190 }
191 
OnLoginFailure(const LoginFailure & error)192 void AppLaunchSigninScreen::OnLoginFailure(const LoginFailure& error) {
193   LOG(ERROR) << "Unlock failure: " << error.reason();
194   webui_handler_->ClearAndEnablePassword();
195   webui_handler_->ShowError(
196      0,
197      l10n_util::GetStringUTF8(IDS_LOGIN_ERROR_AUTHENTICATING_KIOSK),
198      std::string(),
199      HelpAppLauncher::HELP_CANT_ACCESS_ACCOUNT_OFFLINE);
200 }
201 
OnLoginSuccess(const UserContext & user_context)202 void AppLaunchSigninScreen::OnLoginSuccess(const UserContext& user_context) {
203   delegate_->OnOwnerSigninSuccess();
204 }
205 
HandleGetUsers()206 void AppLaunchSigninScreen::HandleGetUsers() {
207   base::ListValue users_list;
208   const UserList& users = GetUsers();
209 
210   for (UserList::const_iterator it = users.begin(); it != users.end(); ++it) {
211     ScreenlockBridge::LockHandler::AuthType initial_auth_type =
212         UserSelectionScreen::ShouldForceOnlineSignIn(*it)
213             ? ScreenlockBridge::LockHandler::ONLINE_SIGN_IN
214             : ScreenlockBridge::LockHandler::OFFLINE_PASSWORD;
215     base::DictionaryValue* user_dict = new base::DictionaryValue();
216     UserSelectionScreen::FillUserDictionary(
217         *it, true, false, initial_auth_type, user_dict);
218     users_list.Append(user_dict);
219   }
220 
221   webui_handler_->LoadUsers(users_list, false, false);
222 }
223 
SetAuthType(const std::string & username,ScreenlockBridge::LockHandler::AuthType auth_type)224 void AppLaunchSigninScreen::SetAuthType(
225     const std::string& username,
226     ScreenlockBridge::LockHandler::AuthType auth_type) {
227   return;
228 }
229 
GetAuthType(const std::string & username) const230 ScreenlockBridge::LockHandler::AuthType AppLaunchSigninScreen::GetAuthType(
231     const std::string& username) const {
232   return ScreenlockBridge::LockHandler::OFFLINE_PASSWORD;
233 }
234 
235 }  // namespace chromeos
236