supervised_user_creation_flow.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1// Copyright 2014 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/supervised/supervised_user_creation_flow.h" 6 7#include "base/logging.h" 8#include "base/values.h" 9#include "chrome/browser/chromeos/login/supervised/supervised_user_creation_screen.h" 10#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 11#include "chrome/browser/chromeos/login/wizard_controller.h" 12#include "chrome/browser/chromeos/profiles/profile_helper.h" 13 14namespace chromeos { 15 16namespace { 17 18SupervisedUserCreationScreen* GetScreen(LoginDisplayHost* host) { 19 DCHECK(host); 20 DCHECK(host->GetWizardController()); 21 DCHECK(host->GetWizardController()->GetSupervisedUserCreationScreen()); 22 return host->GetWizardController()->GetSupervisedUserCreationScreen(); 23} 24 25} // namespace 26 27SupervisedUserCreationFlow::SupervisedUserCreationFlow( 28 const std::string& manager_id) 29 : ExtendedUserFlow(manager_id), 30 token_validated_(false), 31 logged_in_(false), 32 session_started_(false), 33 manager_profile_(NULL) {} 34 35SupervisedUserCreationFlow::~SupervisedUserCreationFlow() {} 36 37bool SupervisedUserCreationFlow::CanLockScreen() { 38 return false; 39} 40 41bool SupervisedUserCreationFlow::ShouldShowSettings() { 42 return false; 43} 44 45bool SupervisedUserCreationFlow::ShouldLaunchBrowser() { 46 return false; 47} 48 49bool SupervisedUserCreationFlow::ShouldSkipPostLoginScreens() { 50 return true; 51} 52 53void SupervisedUserCreationFlow::HandleOAuthTokenStatusChange( 54 user_manager::User::OAuthTokenStatus status) { 55 if (status == user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN) 56 return; 57 if (status == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) { 58 GetScreen(host())->ShowManagerInconsistentStateErrorScreen(); 59 return; 60 } 61 DCHECK(status == user_manager::User::OAUTH2_TOKEN_STATUS_VALID); 62 // We expect that LaunchExtraSteps is called by this time (local 63 // authentication happens before oauth token validation). 64 token_validated_ = true; 65 66 if (token_validated_ && logged_in_) { 67 if (!session_started_) 68 GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_); 69 session_started_ = true; 70 } 71} 72 73bool SupervisedUserCreationFlow::HandleLoginFailure( 74 const AuthFailure& failure) { 75 if (failure.reason() == AuthFailure::COULD_NOT_MOUNT_CRYPTOHOME) 76 GetScreen(host())->OnManagerLoginFailure(); 77 else 78 GetScreen(host())->ShowManagerInconsistentStateErrorScreen(); 79 return true; 80} 81 82void SupervisedUserCreationFlow::HandleLoginSuccess( 83 const UserContext& context) {} 84 85bool SupervisedUserCreationFlow::HandlePasswordChangeDetected() { 86 GetScreen(host())->ShowManagerInconsistentStateErrorScreen(); 87 return true; 88} 89 90void SupervisedUserCreationFlow::LaunchExtraSteps( 91 Profile* profile) { 92 logged_in_ = true; 93 manager_profile_ = profile; 94 ProfileHelper::Get()->ProfileStartup(profile, true); 95 96 if (token_validated_ && logged_in_) { 97 if (!session_started_) 98 GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_); 99 session_started_ = true; 100 } else { 101 GetScreen(host())->OnManagerCryptohomeAuthenticated(); 102 } 103} 104 105} // namespace chromeos 106