| 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();
|
|
|
| - 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 +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(
|
| @@ -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);
|
|
|