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