Index: chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc |
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc |
index 03933fc25f1c9ff75e16a705df62d141f6665a71..d94e8e2f963eafc8afbeb91606cf67a4bff2e2ec 100644 |
--- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc |
+++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc |
@@ -416,6 +416,8 @@ void GaiaScreenHandler::RegisterMessages() { |
&GaiaScreenHandler::HandleAuthExtensionLoaded); |
AddCallback("completeAdAuthentication", |
&GaiaScreenHandler::HandleCompleteAdAuthentication); |
+ AddCallback("completeAdPasswordChange", |
+ &GaiaScreenHandler::HandleCompleteAdPasswordChange); |
} |
void GaiaScreenHandler::OnPortalDetectionCompleted( |
@@ -503,36 +505,75 @@ void GaiaScreenHandler::DoAdAuth(const std::string& username, |
const Key& key, |
authpolicy::ErrorType error, |
const std::string& uid) { |
- if (error == authpolicy::ERROR_NONE && !uid.empty()) { |
- const AccountId account_id( |
- GetAccountId(username, uid, AccountType::ACTIVE_DIRECTORY)); |
- UserContext user_context(account_id); |
- user_context.SetKey(key); |
- user_context.SetAuthFlow(UserContext::AUTH_FLOW_ACTIVE_DIRECTORY); |
- user_context.SetIsUsingOAuth(false); |
- user_context.SetUserType( |
- user_manager::UserType::USER_TYPE_ACTIVE_DIRECTORY); |
- Delegate()->CompleteLogin(user_context); |
- } else { |
- // TODO(rsorokin): Proper error handling. |
- DLOG(ERROR) << "Failed to auth " << username << ", code " << error; |
- LoadAuthExtension(true, false /* offline */); |
+ switch (error) { |
+ case authpolicy::ERROR_NONE: { |
+ DCHECK(!uid.empty()); |
+ const AccountId account_id( |
+ GetAccountId(username, uid, AccountType::ACTIVE_DIRECTORY)); |
+ UserContext user_context(account_id); |
+ user_context.SetKey(key); |
+ user_context.SetAuthFlow(UserContext::AUTH_FLOW_ACTIVE_DIRECTORY); |
+ user_context.SetIsUsingOAuth(false); |
+ user_context.SetUserType( |
+ user_manager::UserType::USER_TYPE_ACTIVE_DIRECTORY); |
+ Delegate()->CompleteLogin(user_context); |
+ break; |
+ } |
+ case authpolicy::ERROR_PASSWORD_EXPIRED: { |
michaelpg
2017/01/16 18:04:42
nit: {} block not necessary
|
+ core_oobe_actor_->ShowActiveDirectoryPasswordChangeScreen(username); |
+ break; |
+ } |
+ case authpolicy::ERROR_UNKNOWN: |
+ case authpolicy::ERROR_DBUS_FAILURE: |
+ case authpolicy::ERROR_PARSE_UPN_FAILED: |
+ case authpolicy::ERROR_BAD_USER_NAME: |
+ case authpolicy::ERROR_BAD_PASSWORD: |
+ case authpolicy::ERROR_CANNOT_RESOLVE_KDC: |
+ case authpolicy::ERROR_KINIT_FAILED: |
+ case authpolicy::ERROR_NET_FAILED: |
+ case authpolicy::ERROR_SMBCLIENT_FAILED: |
+ case authpolicy::ERROR_PARSE_FAILED: |
+ case authpolicy::ERROR_PARSE_PREG_FAILED: |
+ case authpolicy::ERROR_BAD_GPOS: |
+ case authpolicy::ERROR_LOCAL_IO: |
+ case authpolicy::ERROR_NOT_JOINED: |
+ case authpolicy::ERROR_NOT_LOGGED_IN: |
+ case authpolicy::ERROR_STORE_POLICY_FAILED: |
+ LoadAuthExtension(true, false /* offline */); |
+ break; |
+ default: |
+ // TODO(rsorokin): Proper error handling. |
+ DLOG(WARNING) << "Unhandled error code: " << error; |
+ LoadAuthExtension(true, false /* offline */); |
} |
} |
void GaiaScreenHandler::HandleCompleteAdAuthentication( |
- const std::string& user_name, |
+ const std::string& username, |
const std::string& password) { |
- Delegate()->SetDisplayEmail(user_name); |
- set_populated_email(user_name); |
+ Delegate()->SetDisplayEmail(username); |
+ set_populated_email(username); |
login::GetPipeReadEnd( |
password, |
base::Bind(&GaiaScreenHandler::OnPasswordPipeReady, |
- weak_factory_.GetWeakPtr(), user_name, Key(password))); |
+ weak_factory_.GetWeakPtr(), username, Key(password))); |
+} |
+ |
+void GaiaScreenHandler::HandleCompleteAdPasswordChange( |
+ const std::string& username, |
+ const std::string& old_password, |
+ const std::string& new_password) { |
+ Delegate()->SetDisplayEmail(username); |
+ set_populated_email(username); |
+ |
+ login::GetPipeReadEnd( |
+ old_password + "\n" + new_password + "\n" + new_password, |
+ base::Bind(&GaiaScreenHandler::OnPasswordPipeReady, |
+ weak_factory_.GetWeakPtr(), username, Key(new_password))); |
} |
-void GaiaScreenHandler::OnPasswordPipeReady(const std::string& user_name, |
+void GaiaScreenHandler::OnPasswordPipeReady(const std::string& username, |
const Key& key, |
base::ScopedFD password_fd) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
@@ -543,9 +584,9 @@ void GaiaScreenHandler::OnPasswordPipeReady(const std::string& user_name, |
chromeos::AuthPolicyClient* client = |
chromeos::DBusThreadManager::Get()->GetAuthPolicyClient(); |
client->AuthenticateUser( |
- user_name, password_fd.get(), |
+ username, password_fd.get(), |
base::Bind(&GaiaScreenHandler::DoAdAuth, weak_factory_.GetWeakPtr(), |
- user_name, key)); |
+ username, key)); |
} |
void GaiaScreenHandler::HandleCompleteAuthentication( |