| Index: chrome/browser/chromeos/login/lock/screen_locker.cc
|
| diff --git a/chrome/browser/chromeos/login/lock/screen_locker.cc b/chrome/browser/chromeos/login/lock/screen_locker.cc
|
| index b7011cc4d7fc05e53791230eca409da004e8f33d..d167f52a711511673065813fe8166b93a99c9658 100644
|
| --- a/chrome/browser/chromeos/login/lock/screen_locker.cc
|
| +++ b/chrome/browser/chromeos/login/lock/screen_locker.cc
|
| @@ -473,12 +473,23 @@ void ScreenLocker::Hide() {
|
| }
|
|
|
| DCHECK(screen_locker_);
|
| - base::Callback<void(void)> callback =
|
| - base::Bind(&ScreenLocker::ScheduleDeletion);
|
| - ash::Shell::GetInstance()->lock_state_controller()->
|
| - OnLockScreenHide(callback);
|
| +
|
| + // Sets session state to ACTIVE before destroying screen locker. Otherwise,
|
| + // ash thinks the session is blocked and does not correct set focus on
|
| + // screen lock dismissal.
|
| + // TODO(xiyuan): Figure out a better way to ensure state change go through.
|
| + session_manager::SessionManager::Get()->SetSessionState(
|
| + session_manager::SessionState::ACTIVE);
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE, base::Bind([] {
|
| + base::Callback<void(void)> callback =
|
| + base::Bind(&ScreenLocker::ScheduleDeletion);
|
| + ash::Shell::GetInstance()->lock_state_controller()->OnLockScreenHide(
|
| + callback);
|
| + }));
|
| }
|
|
|
| +// static
|
| void ScreenLocker::ScheduleDeletion() {
|
| // Avoid possible multiple calls.
|
| if (screen_locker_ == NULL)
|
| @@ -518,9 +529,6 @@ ScreenLocker::~ScreenLocker() {
|
| DBusThreadManager::Get()->GetSessionManagerClient()->
|
| NotifyLockScreenDismissed();
|
|
|
| - session_manager::SessionManager::Get()->SetSessionState(
|
| - session_manager::SessionState::ACTIVE);
|
| -
|
| if (saved_ime_state_.get()) {
|
| input_method::InputMethodManager::Get()->SetState(saved_ime_state_);
|
| }
|
|
|