b3631132f9bf793e26f2b59f867ca9a60522960e
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / supervised / supervised_user_creation_flow.cc
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
14 namespace chromeos {
15
16 namespace {
17
18 SupervisedUserCreationScreen* 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
29 SupervisedUserCreationFlow::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
37 SupervisedUserCreationFlow::~SupervisedUserCreationFlow() {}
38
39 bool SupervisedUserCreationFlow::CanLockScreen() {
40   return false;
41 }
42
43 bool SupervisedUserCreationFlow::ShouldShowSettings() {
44   return false;
45 }
46
47 bool SupervisedUserCreationFlow::ShouldLaunchBrowser() {
48   return false;
49 }
50
51 bool SupervisedUserCreationFlow::ShouldSkipPostLoginScreens() {
52   return true;
53 }
54
55 void SupervisedUserCreationFlow::HandleOAuthTokenStatusChange(
56     user_manager::User::OAuthTokenStatus status) {
57   if (status == user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN)
58     return;
59   if (status == user_manager::User::OAUTH2_TOKEN_STATUS_INVALID) {
60     GetScreen(host())->ShowManagerInconsistentStateErrorScreen();
61     return;
62   }
63   DCHECK(status == user_manager::User::OAUTH2_TOKEN_STATUS_VALID);
64   // We expect that LaunchExtraSteps is called by this time (local
65   // authentication happens before oauth token validation).
66   token_validated_ = true;
67
68   if (token_validated_ && logged_in_) {
69     if (!session_started_)
70       GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
71     session_started_ = true;
72   }
73 }
74
75 bool SupervisedUserCreationFlow::HandleLoginFailure(
76     const AuthFailure& failure) {
77   if (failure.reason() == AuthFailure::COULD_NOT_MOUNT_CRYPTOHOME)
78     GetScreen(host())->OnManagerLoginFailure();
79   else
80     GetScreen(host())->ShowManagerInconsistentStateErrorScreen();
81   return true;
82 }
83
84 void SupervisedUserCreationFlow::HandleLoginSuccess(
85     const UserContext& context) {}
86
87 bool SupervisedUserCreationFlow::HandlePasswordChangeDetected() {
88   GetScreen(host())->ShowManagerInconsistentStateErrorScreen();
89   return true;
90 }
91
92 void SupervisedUserCreationFlow::LaunchExtraSteps(
93     Profile* profile) {
94   logged_in_ = true;
95   manager_profile_ = profile;
96   ProfileHelper::Get()->ProfileStartup(profile, true);
97
98   if (token_validated_ && logged_in_) {
99     if (!session_started_)
100       GetScreen(host())->OnManagerFullyAuthenticated(manager_profile_);
101     session_started_ = true;
102   } else {
103     GetScreen(host())->OnManagerCryptohomeAuthenticated();
104   }
105 }
106
107 }  // namespace chromeos