supervised_user_creation_flow.cc revision 1675a649fd7a8b3cb80ffddae2dc181f122353c5
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 SupervisedUserCreationScreen* result = 22 SupervisedUserCreationScreen::Get(host->GetWizardController()); 23 DCHECK(result); 24 return result; 25} 26 27} // namespace 28 29SupervisedUserCreationFlow::SupervisedUserCreationFlow( 30 const std::string& manager_id) 31 : ExtendedUserFlow(manager_id), 32 token_validated_(false), 33 logged_in_(false), 34 session_started_(false), 35 manager_profile_(NULL) {} 36 37SupervisedUserCreationFlow::~SupervisedUserCreationFlow() {} 38 39bool SupervisedUserCreationFlow::CanLockScreen() { 40 return false; 41} 42 43bool SupervisedUserCreationFlow::ShouldShowSettings() { 44 return false; 45} 46 47bool SupervisedUserCreationFlow::ShouldLaunchBrowser() { 48 return false; 49} 50 51bool SupervisedUserCreationFlow::ShouldSkipPostLoginScreens() { 52 return true; 53} 54 55bool SupervisedUserCreationFlow::SupportsEarlyRestartToApplyFlags() { 56 return false; 57} 58 59void SupervisedUserCreationFlow::HandleOAuthTokenStatusChange( 60 user_manager::User::OAuthTokenStatus status) { 61 if (status == user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN) 62 return; 63 if (status == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) { 64 GetScreen(host())->ShowManagerInconsistentStateErrorScreen(); 65 return; 66 } 67 DCHECK(status == user_manager::User::OAUTH2_TOKEN_STATUS_VALID); 68 // We expect that LaunchExtraSteps is called by this time (local 69 // authentication happens before oauth token validation). 70 token_validated_ = true; 71 72 if (token_validated_ && logged_in_) { 73 if (!session_started_) 74 GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_); 75 session_started_ = true; 76 } 77} 78 79bool SupervisedUserCreationFlow::HandleLoginFailure( 80 const AuthFailure& failure) { 81 if (failure.reason() == AuthFailure::COULD_NOT_MOUNT_CRYPTOHOME) 82 GetScreen(host())->OnManagerLoginFailure(); 83 else 84 GetScreen(host())->ShowManagerInconsistentStateErrorScreen(); 85 return true; 86} 87 88void SupervisedUserCreationFlow::HandleLoginSuccess( 89 const UserContext& context) {} 90 91bool SupervisedUserCreationFlow::HandlePasswordChangeDetected() { 92 GetScreen(host())->ShowManagerInconsistentStateErrorScreen(); 93 return true; 94} 95 96void SupervisedUserCreationFlow::LaunchExtraSteps( 97 Profile* profile) { 98 logged_in_ = true; 99 manager_profile_ = profile; 100 ProfileHelper::Get()->ProfileStartup(profile, true); 101 102 if (token_validated_ && logged_in_) { 103 if (!session_started_) 104 GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_); 105 session_started_ = true; 106 } else { 107 GetScreen(host())->OnManagerCryptohomeAuthenticated(); 108 } 109} 110 111} // namespace chromeos 112