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