Chromium Code Reviews| 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..962498d2bfe78b22530cb35be1b430034632999a 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,7 @@ void ExistingUserController::MigrateUserData(const std::string& old_password) { |
| void ExistingUserController::OnSigninScreenReady() { |
| signin_screen_ready_ = true; |
| - StartPublicSessionAutoLoginTimer(); |
| + StartAutoLoginTimer(); |
| } |
| void ExistingUserController::OnStartEnterpriseEnrollment() { |
| @@ -596,7 +604,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 +626,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 +661,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 +800,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 +922,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 +940,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(); |
|
Nikita (slow)
2016/11/18 15:12:58
nit: {}
Sergey Poromov
2016/11/18 15:47:26
Done.
|
| - 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(); |
|
Nikita (slow)
2016/11/18 15:12:58
nit: {}
Sergey Poromov
2016/11/18 15:47:26
Done.
|
| + |
| + 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() || |
|
Nikita (slow)
2016/11/18 15:12:58
nit: {}
Sergey Poromov
2016/11/18 15:47:26
Done.
|
| + arc_kiosk_auto_login_account_id_.is_valid()) |
| + StartAutoLoginTimer(); |
| else |
| - StopPublicSessionAutoLoginTimer(); |
| + StopAutoLoginTimer(); |
| } |
| void ExistingUserController::ResetPublicSessionAutoLoginTimer() { |
|
Nikita (slow)
2016/11/18 15:12:58
nit: rename
Sergey Poromov
2016/11/18 15:47:26
Done.
|
| // 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 +984,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 +1007,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 +1105,7 @@ void ExistingUserController::PerformPreLoginActions( |
| num_login_attempts_++; |
| // Stop the auto-login timer when attempting login. |
| - StopPublicSessionAutoLoginTimer(); |
| + StopAutoLoginTimer(); |
| } |
| void ExistingUserController::PerformLoginFinishedActions( |
|
Nikita (slow)
2016/11/18 15:12:58
nit: rename method param
Sergey Poromov
2016/11/18 15:47:26
Done.
|
| @@ -1085,7 +1116,7 @@ void ExistingUserController::PerformLoginFinishedActions( |
| login_display_->SetUIEnabled(true); |
| if (start_public_session_timer) |
| - StartPublicSessionAutoLoginTimer(); |
| + StartAutoLoginTimer(); |
| } |
| void ExistingUserController::ContinueLoginIfDeviceNotDisabled( |
| @@ -1094,7 +1125,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 +1257,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); |