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