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 19namespace chromeos { 20 21user_manager::UserManager* AppLaunchSigninScreen::test_user_manager_ = NULL; 22 23AppLaunchSigninScreen::AppLaunchSigninScreen( 24 OobeUI* oobe_ui, Delegate* delegate) 25 : oobe_ui_(oobe_ui), 26 delegate_(delegate), 27 webui_handler_(NULL) { 28} 29 30AppLaunchSigninScreen::~AppLaunchSigninScreen() { 31 oobe_ui_->ResetSigninScreenHandlerDelegate(); 32} 33 34void 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 42void 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 60void AppLaunchSigninScreen::SetUserManagerForTesting( 61 user_manager::UserManager* user_manager) { 62 test_user_manager_ = user_manager; 63} 64 65user_manager::UserManager* AppLaunchSigninScreen::GetUserManager() { 66 return test_user_manager_ ? test_user_manager_ 67 : user_manager::UserManager::Get(); 68} 69 70void AppLaunchSigninScreen::CancelPasswordChangedFlow() { 71 NOTREACHED(); 72} 73 74void AppLaunchSigninScreen::CancelUserAdding() { 75 NOTREACHED(); 76} 77 78void AppLaunchSigninScreen::CreateAccount() { 79 NOTREACHED(); 80} 81 82void AppLaunchSigninScreen::CompleteLogin(const UserContext& user_context) { 83 NOTREACHED(); 84} 85 86void 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 98void AppLaunchSigninScreen::MigrateUserData(const std::string& old_password) { 99 NOTREACHED(); 100} 101 102void AppLaunchSigninScreen::LoadWallpaper(const std::string& username) { 103} 104 105void AppLaunchSigninScreen::LoadSigninWallpaper() { 106} 107 108void AppLaunchSigninScreen::OnSigninScreenReady() { 109} 110 111void AppLaunchSigninScreen::RemoveUser(const std::string& username) { 112 NOTREACHED(); 113} 114 115void AppLaunchSigninScreen::ResyncUserData() { 116 NOTREACHED(); 117} 118 119void AppLaunchSigninScreen::ShowEnterpriseEnrollmentScreen() { 120 NOTREACHED(); 121} 122 123void AppLaunchSigninScreen::ShowKioskEnableScreen() { 124 NOTREACHED(); 125} 126 127void AppLaunchSigninScreen::ShowKioskAutolaunchScreen() { 128 NOTREACHED(); 129} 130 131void AppLaunchSigninScreen::ShowWrongHWIDScreen() { 132 NOTREACHED(); 133} 134 135void AppLaunchSigninScreen::SetWebUIHandler( 136 LoginDisplayWebUIHandler* webui_handler) { 137 webui_handler_ = webui_handler; 138} 139 140void AppLaunchSigninScreen::ShowSigninScreenForCreds( 141 const std::string& username, 142 const std::string& password) { 143 NOTREACHED(); 144} 145 146const 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 153bool AppLaunchSigninScreen::IsShowGuest() const { 154 return false; 155} 156 157bool AppLaunchSigninScreen::IsShowUsers() const { 158 return true; 159} 160 161bool AppLaunchSigninScreen::IsSigninInProgress() const { 162 // Return true to suppress network processing in the signin screen. 163 return true; 164} 165 166bool AppLaunchSigninScreen::IsUserSigninCompleted() const { 167 return false; 168} 169 170void AppLaunchSigninScreen::SetDisplayEmail(const std::string& email) { 171 return; 172} 173 174void AppLaunchSigninScreen::Signout() { 175 NOTREACHED(); 176} 177 178void 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 188void AppLaunchSigninScreen::OnAuthSuccess(const UserContext& user_context) { 189 delegate_->OnOwnerSigninSuccess(); 190} 191 192void 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 217void AppLaunchSigninScreen::SetAuthType( 218 const std::string& username, 219 ScreenlockBridge::LockHandler::AuthType auth_type) { 220 return; 221} 222 223ScreenlockBridge::LockHandler::AuthType AppLaunchSigninScreen::GetAuthType( 224 const std::string& username) const { 225 return ScreenlockBridge::LockHandler::OFFLINE_PASSWORD; 226} 227 228} // namespace chromeos 229