supervised_user_creation_flow.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/supervised/supervised_user_creation_flow.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/supervised/supervised_user_creation_screen.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/wizard_controller.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SupervisedUserCreationScreen* GetScreen(LoginDisplayHost* host) {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(host);
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(host->GetWizardController());
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SupervisedUserCreationScreen* result =
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      SupervisedUserCreationScreen::Get(host->GetWizardController());
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(result);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SupervisedUserCreationFlow::SupervisedUserCreationFlow(
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& manager_id)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        : ExtendedUserFlow(manager_id),
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        token_validated_(false),
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        logged_in_(false),
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        session_started_(false),
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        manager_profile_(NULL) {}
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SupervisedUserCreationFlow::~SupervisedUserCreationFlow() {}
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SupervisedUserCreationFlow::CanLockScreen() {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SupervisedUserCreationFlow::ShouldShowSettings() {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SupervisedUserCreationFlow::ShouldLaunchBrowser() {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SupervisedUserCreationFlow::ShouldSkipPostLoginScreens() {
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SupervisedUserCreationFlow::HandleOAuthTokenStatusChange(
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    user_manager::User::OAuthTokenStatus status) {
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (status == user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (status == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetScreen(host())->ShowManagerInconsistentStateErrorScreen();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(status == user_manager::User::OAUTH2_TOKEN_STATUS_VALID);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We expect that LaunchExtraSteps is called by this time (local
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // authentication happens before oauth token validation).
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  token_validated_ = true;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (token_validated_ && logged_in_) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!session_started_)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    session_started_ = true;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SupervisedUserCreationFlow::HandleLoginFailure(
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const AuthFailure& failure) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (failure.reason() == AuthFailure::COULD_NOT_MOUNT_CRYPTOHOME)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetScreen(host())->OnManagerLoginFailure();
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetScreen(host())->ShowManagerInconsistentStateErrorScreen();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SupervisedUserCreationFlow::HandleLoginSuccess(
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const UserContext& context) {}
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SupervisedUserCreationFlow::HandlePasswordChangeDetected() {
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetScreen(host())->ShowManagerInconsistentStateErrorScreen();
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SupervisedUserCreationFlow::LaunchExtraSteps(
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile) {
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  logged_in_ = true;
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager_profile_ = profile;
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileHelper::Get()->ProfileStartup(profile, true);
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (token_validated_ && logged_in_) {
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (!session_started_)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    session_started_ = true;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GetScreen(host())->OnManagerCryptohomeAuthenticated();
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)