From 2d92abb6e9b343499b469416e5b60b46ee0d9e00 Mon Sep 17 00:00:00 2001 From: "dpolukhin@chromium.org" Date: Fri, 17 May 2013 19:47:49 +0000 Subject: [PATCH] Postponed posting pref change even to UI until it is visible Sending messages to UI cause switch from account picker screen to account picker screen that inhibits animation completion signal so correct initialization could not happen. BUG=180520 TEST=manual Review URL: https://chromiumcodereview.appspot.com/15279002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@200869 0039d316-1c4b-4281-b951-d872f2087c98 --- .../ui/webui/chromeos/login/signin_screen_handler.cc | 19 +++++++++++-------- .../ui/webui/chromeos/login/signin_screen_handler.h | 4 +--- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc index 77493fd3f774..2aec3cf35d33 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc @@ -345,7 +345,7 @@ SigninScreenHandler::SigninScreenHandler( network_state_informer_(network_state_informer), weak_factory_(this), webui_visible_(false), - login_ui_active_(false), + preferences_changed_delayed_(false), error_screen_actor_(error_screen_actor), is_first_update_state_call_(true), offline_login_active_(false), @@ -840,10 +840,11 @@ void SigninScreenHandler::OnUserImageChanged(const User& user) { } void SigninScreenHandler::OnPreferencesChanged() { - // Make sure that one of the login UI is active now, otherwise + // Make sure that one of the login UI is fully functional now, otherwise // preferences update would be picked up next time it will be shown. - if (!login_ui_active_) { - LOG(WARNING) << "Login UI is not active - ignoring prefs change."; + if (!webui_visible_) { + LOG(WARNING) << "Login UI is not active - postponed prefs change."; + preferences_changed_delayed_ = true; return; } @@ -853,6 +854,7 @@ void SigninScreenHandler::OnPreferencesChanged() { SendUserList(false); UpdateUIState(UI_STATE_ACCOUNT_PICKER, NULL); } + preferences_changed_delayed_ = false; } void SigninScreenHandler::ResetSigninScreenHandlerDelegate() { @@ -1406,6 +1408,8 @@ void SigninScreenHandler::HandleLoginVisible(const std::string& source) { content::NotificationService::NoDetails()); } webui_visible_ = true; + if (preferences_changed_delayed_) + OnPreferencesChanged(); } void SigninScreenHandler::HandleCancelPasswordChangedFlow() { @@ -1427,6 +1431,9 @@ void SigninScreenHandler::HandleResyncUserData() { void SigninScreenHandler::HandleLoginUIStateChanged(const std::string& source, bool new_value) { + LOG(INFO) << "Login WebUI >> active: " << new_value << ", " + << "source: " << source; + if (source == kSourceGaiaSignin) { ui_state_ = UI_STATE_GAIA_SIGNIN; } else if (source == kSourceAccountPicker) { @@ -1435,10 +1442,6 @@ void SigninScreenHandler::HandleLoginUIStateChanged(const std::string& source, NOTREACHED(); return; } - - LOG(INFO) << "Login WebUI >> active: " << new_value << ", " - << "source: " << source; - login_ui_active_ = new_value; } void SigninScreenHandler::HandleUnlockOnLoginSuccess() { diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h index 6f5be0f6c6c7..b12d2a59c53e 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h @@ -424,9 +424,7 @@ class SigninScreenHandler // Set to true once |LOGIN_WEBUI_VISIBLE| notification is observed. bool webui_visible_; - - // True when signin UI is shown to user (either sign in form or user pods). - bool login_ui_active_; + bool preferences_changed_delayed_; ErrorScreenActor* error_screen_actor_; -- 2.11.4.GIT