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 0cf370e5eaffb717f5cfdc32ff4e795bfeae8f30..648d568fa2dcd472c2e331b9732091ca4ecdbf3c 100644 |
| --- a/chrome/browser/chromeos/login/existing_user_controller.cc |
| +++ b/chrome/browser/chromeos/login/existing_user_controller.cc |
| @@ -144,7 +144,8 @@ ExistingUserController::ExistingUserController(LoginDisplayHost* host) |
| offline_failed_(false), |
| is_login_in_progress_(false), |
| password_changed_(false), |
| - do_auto_enrollment_(false) { |
| + do_auto_enrollment_(false), |
| + signin_screen_ready_(false) { |
| DCHECK(current_controller_ == NULL); |
| current_controller_ = this; |
| @@ -164,6 +165,12 @@ ExistingUserController::ExistingUserController(LoginDisplayHost* host) |
| cros_settings_->AddSettingsObserver(kAccountsPrefAllowNewUser, this); |
| cros_settings_->AddSettingsObserver(kAccountsPrefAllowGuest, this); |
| cros_settings_->AddSettingsObserver(kAccountsPrefUsers, this); |
| + cros_settings_->AddSettingsObserver( |
| + kAccountsPrefDeviceLocalAccountAutoLoginId, |
| + this); |
| + cros_settings_->AddSettingsObserver( |
| + kAccountsPrefDeviceLocalAccountAutoLoginDelay, |
| + this); |
| } |
| void ExistingUserController::Init(const UserList& users) { |
| @@ -229,6 +236,12 @@ void ExistingUserController::Observe( |
| registrar_.RemoveAll(); |
| return; |
| } |
| + if (type == chrome::NOTIFICATION_SYSTEM_SETTING_CHANGED) { |
| + std::string setting = *content::Details<const std::string>(details).ptr(); |
| + if (setting == kAccountsPrefDeviceLocalAccountAutoLoginId || |
| + setting == kAccountsPrefDeviceLocalAccountAutoLoginDelay) |
| + StartAutoLoginTimer(); |
|
Nikita (slow)
2013/02/11 09:56:58
nit: add {}
dconnelly
2013/02/11 16:17:56
Done.
|
| + } |
| if (type == chrome::NOTIFICATION_SYSTEM_SETTING_CHANGED || |
| type == chrome::NOTIFICATION_POLICY_USER_LIST_CHANGED) { |
| if (host_ != NULL) { |
| @@ -278,6 +291,12 @@ ExistingUserController::~ExistingUserController() { |
| cros_settings_->RemoveSettingsObserver(kAccountsPrefAllowNewUser, this); |
| cros_settings_->RemoveSettingsObserver(kAccountsPrefAllowGuest, this); |
| cros_settings_->RemoveSettingsObserver(kAccountsPrefUsers, this); |
| + cros_settings_->RemoveSettingsObserver( |
| + kAccountsPrefDeviceLocalAccountAutoLoginId, |
| + this); |
| + cros_settings_->RemoveSettingsObserver( |
| + kAccountsPrefDeviceLocalAccountAutoLoginDelay, |
| + this); |
| if (current_controller_ == this) { |
| current_controller_ = NULL; |
| @@ -412,6 +431,9 @@ void ExistingUserController::PerformLogin( |
| login_display_->SetUIEnabled(false); |
| resume_login_callback_.Reset(); |
| + // Stop the autologin timer when attempting login. |
|
bartfab (slow)
2013/02/11 09:46:01
Nit: You used the term "autologin" in this file an
dconnelly
2013/02/11 16:17:56
Done.
|
| + StopAutoLoginTimer(); |
|
Nikita (slow)
2013/02/11 09:56:58
I think that we want to stop this timer as soon as
dconnelly
2013/02/11 16:17:56
Done.
|
| + |
| // Use the same LoginPerformer for subsequent login as it has state |
| // such as Authenticator instance. |
| if (!login_performer_.get() || num_login_attempts_ <= 1) { |
| @@ -440,6 +462,9 @@ void ExistingUserController::LoginAsRetailModeUser() { |
| // TODO(rkc): Add a CHECK to make sure retail mode logins are allowed once |
| // the enterprise policy wiring is done for retail mode. |
| + // Stop the autologin timer when attempting login. |
| + StopAutoLoginTimer(); |
|
bartfab (slow)
2013/02/11 09:46:01
Just an idea: Instead of having to stop the timer
|
| + |
| // Only one instance of LoginPerformer should exist at a time. |
| login_performer_.reset(NULL); |
| login_performer_.reset(new LoginPerformer(this)); |
| @@ -485,6 +510,9 @@ void ExistingUserController::LoginAsGuest() { |
| return; |
| } |
| + // Stop the autologin timer when attempting login. |
| + StopAutoLoginTimer(); |
|
Nikita (slow)
2013/02/11 09:56:58
Why not place this call to the beginning of this m
dconnelly
2013/02/11 16:17:56
Done.
|
| + |
| // Only one instance of LoginPerformer should exist at a time. |
| login_performer_.reset(NULL); |
| login_performer_.reset(new LoginPerformer(this)); |
| @@ -532,6 +560,9 @@ void ExistingUserController::LoginAsPublicAccount( |
| return; |
| } |
| + // Stop the autologin timer when attempting login. |
| + StopAutoLoginTimer(); |
|
Nikita (slow)
2013/02/11 09:56:58
Why not place this call to the beginning of this m
dconnelly
2013/02/11 16:17:56
Done.
|
| + |
| // Only one instance of LoginPerformer should exist at a time. |
| login_performer_.reset(NULL); |
| login_performer_.reset(new LoginPerformer(this)); |
| @@ -541,6 +572,11 @@ void ExistingUserController::LoginAsPublicAccount( |
| l10n_util::GetStringUTF8(IDS_CHROMEOS_ACC_LOGIN_SIGNIN_PUBLIC_ACCOUNT)); |
| } |
| +void ExistingUserController::OnSigninScreenReady() { |
| + signin_screen_ready_ = true; |
| + StartAutoLoginTimer(); |
| +} |
| + |
| void ExistingUserController::OnUserSelected(const std::string& username) { |
| login_performer_.reset(NULL); |
| num_login_attempts_ = 0; |
| @@ -681,6 +717,8 @@ void ExistingUserController::OnLoginFailure(const LoginFailure& failure) { |
| // Clear the recorded displayed email so it won't affect any future attempts. |
| display_email_.clear(); |
| + |
| + StartAutoLoginTimer(); |
|
Nikita (slow)
2013/02/11 09:56:58
Are you sure this is what you want? This callback
dconnelly
2013/02/11 16:17:56
Yes, this is the intended behavior.
Nikita (slow)
2013/02/11 17:30:29
I think that has some potential issues when one us
|
| } |
| void ExistingUserController::OnLoginSuccess( |
| @@ -840,6 +878,9 @@ void ExistingUserController::PolicyLoadFailed() { |
| login_display_->SetUIEnabled(true); |
| display_email_.clear(); |
| + |
| + // Policy load failure stops login attempts--restart the timer. |
|
bartfab (slow)
2013/02/11 09:46:01
Nit: spaces around the dash. Also, -- for an em da
dconnelly
2013/02/11 16:17:56
My bad, ---. You don't need the spaces, though, a
|
| + StartAutoLoginTimer(); |
|
Nikita (slow)
2013/02/11 09:56:58
I thought that this error is kind of unrecoverable
dconnelly
2013/02/11 16:17:56
I ran into a problem during debugging where I scre
|
| } |
| void ExistingUserController::OnOnlineChecked(const std::string& username, |
| @@ -881,6 +922,33 @@ void ExistingUserController::ActivateWizard(const std::string& screen_name) { |
| host_->StartWizard(screen_name, params); |
| } |
| +void ExistingUserController::StopAutoLoginTimer() { |
| + auto_login_timer_.Stop(); |
| +} |
| + |
| +void ExistingUserController::StartAutoLoginTimer() { |
| + if (!signin_screen_ready_) |
| + return; |
| + |
| + std::string username; |
| + if (cros_settings_->GetString( |
| + kAccountsPrefDeviceLocalAccountAutoLoginId, |
| + &username) && !username.empty()) { |
| + int timer; |
| + if (!cros_settings_->GetInteger( |
| + kAccountsPrefDeviceLocalAccountAutoLoginDelay, |
| + &timer)) { |
| + timer = 0; |
| + } |
| + auto_login_timer_.Start(FROM_HERE, |
| + base::TimeDelta::FromMilliseconds(timer), |
| + base::Bind( |
| + &ExistingUserController::LoginAsPublicAccount, |
| + weak_factory_.GetWeakPtr(), |
| + username)); |
|
bartfab (slow)
2013/02/11 09:46:01
Nit: Rather than indenting deeper and deeper, I th
dconnelly
2013/02/11 16:17:56
Done.
|
| + } |
| +} |
| + |
| gfx::NativeWindow ExistingUserController::GetNativeWindow() const { |
| return host_->GetNativeWindow(); |
| } |