Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4924)

Unified Diff: chrome/browser/chromeos/login/existing_user_controller.cc

Issue 2510203002: Implement auto-login for ARC kiosk. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@kiosk_session
Patch Set: Report GaiaScreenReady() from GaiaScreenHandler to ExistingUserController. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/existing_user_controller.cc
diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc
index a55cb9433ad64457fcfbf9b50800eb6205cd9e4a..84b256cd291877b70939f65d90ed7f452e714eaa 100644
--- a/chrome/browser/chromeos/login/existing_user_controller.cc
+++ b/chrome/browser/chromeos/login/existing_user_controller.cc
@@ -209,19 +209,19 @@ ExistingUserController::ExistingUserController(LoginDisplayHost* host)
local_account_auto_login_id_subscription_ =
cros_settings_->AddSettingsObserver(
kAccountsPrefDeviceLocalAccountAutoLoginId,
- base::Bind(&ExistingUserController::ConfigurePublicSessionAutoLogin,
+ base::Bind(&ExistingUserController::ConfigureAutoLogin,
base::Unretained(this)));
local_account_auto_login_delay_subscription_ =
cros_settings_->AddSettingsObserver(
kAccountsPrefDeviceLocalAccountAutoLoginDelay,
- base::Bind(&ExistingUserController::ConfigurePublicSessionAutoLogin,
+ base::Bind(&ExistingUserController::ConfigureAutoLogin,
base::Unretained(this)));
}
void ExistingUserController::Init(const user_manager::UserList& users) {
time_init_ = base::Time::Now();
UpdateLoginDisplay(users);
- ConfigurePublicSessionAutoLogin();
+ ConfigureAutoLogin();
}
void ExistingUserController::UpdateLoginDisplay(
@@ -322,6 +322,14 @@ void ExistingUserController::Observe(
}
////////////////////////////////////////////////////////////////////////////////
+// ExistingUserController, ArcKioskAppManager::ArcKioskAppManagerObserver
+// implementation:
+//
+
+void ExistingUserController::OnArcKioskAppsChanged() {
+ ConfigureAutoLogin();
+}
+////////////////////////////////////////////////////////////////////////////////
// ExistingUserController, private:
ExistingUserController::~ExistingUserController() {
@@ -435,7 +443,13 @@ void ExistingUserController::MigrateUserData(const std::string& old_password) {
void ExistingUserController::OnSigninScreenReady() {
signin_screen_ready_ = true;
- StartPublicSessionAutoLoginTimer();
+ StartAutoLoginTimer();
+}
+
+void ExistingUserController::OnGaiaScreenReady() {
+ // Treat GAIA screen same as signin screen.
+ signin_screen_ready_ = true;
+ StartAutoLoginTimer();
}
void ExistingUserController::OnStartEnterpriseEnrollment() {
@@ -596,7 +610,7 @@ void ExistingUserController::OnAuthFailure(const AuthFailure& failure) {
} else if (last_login_attempt_account_id_ == user_manager::GuestAccountId()) {
// Show no errors, just re-enable input.
login_display_->ClearAndEnablePassword();
- StartPublicSessionAutoLoginTimer();
+ StartAutoLoginTimer();
} else {
// Check networking after trying to login in case user is
// cached locally or the local admin account.
@@ -618,7 +632,7 @@ void ExistingUserController::OnAuthFailure(const AuthFailure& failure) {
UMA_HISTOGRAM_BOOLEAN("Login.OfflineFailure.IsKnownUser", is_known_user);
login_display_->ClearAndEnablePassword();
- StartPublicSessionAutoLoginTimer();
+ StartAutoLoginTimer();
}
// Reset user flow to default, so that special flow will not affect next
@@ -653,7 +667,7 @@ void ExistingUserController::OnAuthSuccess(const UserContext& user_context) {
->GetUserFlow(user_context.GetAccountId())
->HandleLoginSuccess(user_context);
- StopPublicSessionAutoLoginTimer();
+ StopAutoLoginTimer();
// Truth table of |has_auth_cookies|:
// Regular SAML
@@ -792,7 +806,7 @@ void ExistingUserController::DeviceSettingsChanged() {
if (host_ != nullptr && !login_display_->is_signin_completed()) {
// Signed settings or user list changed. Notify views and update them.
UpdateLoginDisplay(user_manager::UserManager::Get()->GetUsers());
- ConfigurePublicSessionAutoLogin();
+ ConfigureAutoLogin();
}
}
@@ -914,7 +928,7 @@ void ExistingUserController::LoginAsArcKioskApp(const AccountId& account_id) {
login_performer_->LoginAsArcKioskAccount(account_id);
}
-void ExistingUserController::ConfigurePublicSessionAutoLogin() {
+void ExistingUserController::ConfigureAutoLogin() {
std::string auto_login_account_id;
cros_settings_->GetString(kAccountsPrefDeviceLocalAccountAutoLoginId,
&auto_login_account_id);
@@ -932,28 +946,39 @@ void ExistingUserController::ConfigurePublicSessionAutoLogin() {
}
}
- const user_manager::User* user = user_manager::UserManager::Get()->FindUser(
- public_session_auto_login_account_id_);
- if (!user || user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT)
+ const user_manager::User* public_session_user =
+ user_manager::UserManager::Get()->FindUser(
+ public_session_auto_login_account_id_);
+ if (!public_session_user ||
+ public_session_user->GetType() != user_manager::USER_TYPE_PUBLIC_ACCOUNT)
public_session_auto_login_account_id_ = EmptyAccountId();
- if (!cros_settings_->GetInteger(
- kAccountsPrefDeviceLocalAccountAutoLoginDelay,
- &public_session_auto_login_delay_)) {
- public_session_auto_login_delay_ = 0;
+ arc_kiosk_auto_login_account_id_ =
+ ArcKioskAppManager::Get()->GetAutoLaunchAccountId();
+ const user_manager::User* arc_kiosk_user =
+ user_manager::UserManager::Get()->FindUser(
+ arc_kiosk_auto_login_account_id_);
+ if (!arc_kiosk_user ||
+ arc_kiosk_user->GetType() != user_manager::USER_TYPE_ARC_KIOSK_APP)
+ arc_kiosk_auto_login_account_id_ = EmptyAccountId();
+
+ if (!cros_settings_->GetInteger(kAccountsPrefDeviceLocalAccountAutoLoginDelay,
+ &auto_login_delay_)) {
+ auto_login_delay_ = 0;
}
- if (public_session_auto_login_account_id_.is_valid())
- StartPublicSessionAutoLoginTimer();
+ if (public_session_auto_login_account_id_.is_valid() ||
+ arc_kiosk_auto_login_account_id_.is_valid())
+ StartAutoLoginTimer();
else
- StopPublicSessionAutoLoginTimer();
+ StopAutoLoginTimer();
}
void ExistingUserController::ResetPublicSessionAutoLoginTimer() {
// Only restart the auto-login timer if it's already running.
if (auto_login_timer_ && auto_login_timer_->IsRunning()) {
- StopPublicSessionAutoLoginTimer();
- StartPublicSessionAutoLoginTimer();
+ StopAutoLoginTimer();
+ StartAutoLoginTimer();
}
}
@@ -965,14 +990,22 @@ void ExistingUserController::OnPublicSessionAutoLoginTimerFire() {
SigninSpecifics());
}
-void ExistingUserController::StopPublicSessionAutoLoginTimer() {
+void ExistingUserController::OnArcKioskAutoLoginTimerFire() {
+ CHECK(signin_screen_ready_ && (arc_kiosk_auto_login_account_id_.is_valid()));
+ Login(UserContext(user_manager::USER_TYPE_ARC_KIOSK_APP,
+ arc_kiosk_auto_login_account_id_),
+ SigninSpecifics());
+}
+
+void ExistingUserController::StopAutoLoginTimer() {
if (auto_login_timer_)
auto_login_timer_->Stop();
}
-void ExistingUserController::StartPublicSessionAutoLoginTimer() {
+void ExistingUserController::StartAutoLoginTimer() {
if (!signin_screen_ready_ || is_login_in_progress_ ||
- !public_session_auto_login_account_id_.is_valid()) {
+ (!public_session_auto_login_account_id_.is_valid() &&
+ !arc_kiosk_auto_login_account_id_.is_valid())) {
return;
}
@@ -980,13 +1013,17 @@ void ExistingUserController::StartPublicSessionAutoLoginTimer() {
if (!auto_login_timer_)
auto_login_timer_.reset(new base::OneShotTimer);
- auto_login_timer_->Start(
- FROM_HERE,
- base::TimeDelta::FromMilliseconds(
- public_session_auto_login_delay_),
- base::Bind(
- &ExistingUserController::OnPublicSessionAutoLoginTimerFire,
- weak_factory_.GetWeakPtr()));
+ if (public_session_auto_login_account_id_.is_valid()) {
+ auto_login_timer_->Start(
+ FROM_HERE, base::TimeDelta::FromMilliseconds(auto_login_delay_),
+ base::Bind(&ExistingUserController::OnPublicSessionAutoLoginTimerFire,
+ weak_factory_.GetWeakPtr()));
+ } else {
+ auto_login_timer_->Start(
+ FROM_HERE, base::TimeDelta::FromMilliseconds(auto_login_delay_),
+ base::Bind(&ExistingUserController::OnArcKioskAutoLoginTimerFire,
+ weak_factory_.GetWeakPtr()));
+ }
}
gfx::NativeWindow ExistingUserController::GetNativeWindow() const {
@@ -1074,7 +1111,7 @@ void ExistingUserController::PerformPreLoginActions(
num_login_attempts_++;
// Stop the auto-login timer when attempting login.
- StopPublicSessionAutoLoginTimer();
+ StopAutoLoginTimer();
}
void ExistingUserController::PerformLoginFinishedActions(
@@ -1085,7 +1122,7 @@ void ExistingUserController::PerformLoginFinishedActions(
login_display_->SetUIEnabled(true);
if (start_public_session_timer)
- StartPublicSessionAutoLoginTimer();
+ StartAutoLoginTimer();
}
void ExistingUserController::ContinueLoginIfDeviceNotDisabled(
@@ -1094,7 +1131,7 @@ void ExistingUserController::ContinueLoginIfDeviceNotDisabled(
login_display_->SetUIEnabled(false);
// Stop the auto-login timer.
- StopPublicSessionAutoLoginTimer();
+ StopAutoLoginTimer();
// Wait for the |cros_settings_| to become either trusted or permanently
// untrusted.
@@ -1226,7 +1263,7 @@ void ExistingUserController::DoLogin(const UserContext& user_context,
// Reenable clicking on other windows and status area.
login_display_->SetUIEnabled(true);
// Restart the auto-login timer.
- StartPublicSessionAutoLoginTimer();
+ StartAutoLoginTimer();
}
PerformPreLoginActions(user_context);

Powered by Google App Engine
This is Rietveld 408576698