diff options
6 files changed, 55 insertions, 15 deletions
diff --git a/chrome/browser/resources/chromeos/login/header_bar.js b/chrome/browser/resources/chromeos/login/header_bar.js index 51d2a69..d0ee6a7 100644 --- a/chrome/browser/resources/chromeos/login/header_bar.js +++ b/chrome/browser/resources/chromeos/login/header_bar.js @@ -80,6 +80,13 @@ cr.define('login', function() { * @private */ handleCancelAddUserClick_: function(e) { + // Let screen handle cancel itself if that is capable of doing so. + if (Oobe.getInstance().currentScreen && + Oobe.getInstance().currentScreen.cancel) { + Oobe.getInstance().currentScreen.cancel(); + return; + } + $('login-header-bar').signinUIActive = false; $('pod-row').loadLastWallpaper(); diff --git a/chrome/browser/resources/chromeos/login/screen_password_changed.js b/chrome/browser/resources/chromeos/login/screen_password_changed.js index 82c3a21..2318640 100644 --- a/chrome/browser/resources/chromeos/login/screen_password_changed.js +++ b/chrome/browser/resources/chromeos/login/screen_password_changed.js @@ -72,7 +72,7 @@ cr.define('login', function() { backButton.addEventListener('click', function(e) { var screen = $('password-changed'); if (screen.classList.contains('migrate')) { - chrome.send('cancelPasswordChangedFlow'); + screen.cancel(); } else { // Resync all data UI step. screen.classList.remove('resync'); @@ -98,12 +98,8 @@ cr.define('login', function() { localStrings.getString('proceedAnywayButton'); proceedAnywayButton.addEventListener('click', function(e) { var screen = $('password-changed'); - if (screen.classList.contains('migrate')) { - screen.classList.remove('resync'); - screen.classList.add('migrate'); - } else { + if (screen.classList.contains('resync')) $('password-changed').resync(); - } e.stopPropagation(); }); buttons.push(proceedAnywayButton); @@ -138,6 +134,16 @@ cr.define('login', function() { }, /** + * Cancels password migration and drops the user back to the login screen. + */ + cancel: function() { + this.disabled = true; + // Reset login action bar state. + $('login-header-bar').signinUIActive = false; + chrome.send('cancelPasswordChangedFlow'); + }, + + /** * Starts migration process using old password that user provided. */ migrate: function() { @@ -166,8 +172,10 @@ cr.define('login', function() { // We'll get here after the successful online authentication. // It assumes session is about to start so hides login screen controls. Oobe.getInstance().headerHidden = false; - $('password-changed').classList[ - showError ? 'add' : 'remove']('password-error'); + var screen = $('password-changed'); + screen.classList[showError ? 'add' : 'remove']('password-error'); + screen.classList.add('migrate'); + screen.classList.remove('resync'); $('old-password').value = ''; $('password-changed').disabled = false; diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index 89ae4fd..b11eb15 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc @@ -130,6 +130,7 @@ const char OobeUI::kScreenGaiaSignin[] = "gaia-signin"; const char OobeUI::kScreenAccountPicker[] = "account-picker"; const char OobeUI::kScreenUserImagePicker[] = "user-image"; const char OobeUI::kScreenTpmError[] = "tpm-error-message"; +const char OobeUI::kScreenPasswordChanged[] = "password-changed"; OobeUI::OobeUI(content::WebUI* web_ui) : WebUIController(web_ui), @@ -303,6 +304,7 @@ void OobeUI::InitializeScreenMap() { screen_map_[kScreenAccountPicker] = SCREEN_ACCOUNT_PICKER; screen_map_[kScreenUserImagePicker] = SCREEN_USER_IMAGE_PICKER; screen_map_[kScreenTpmError] = SCREEN_TMP_ERROR; + screen_map_[kScreenPasswordChanged] = SCREEN_PASSWORD_CHANGED; } void OobeUI::AddScreenHandler(BaseScreenHandler* handler) { @@ -339,8 +341,12 @@ void OobeUI::ResetSigninScreenHandlerDelegate() { } void OobeUI::OnCurrentScreenChanged(const std::string& screen) { - if (screen_map_.count(screen)) + if (screen_map_.count(screen)) { current_screen_ = screen_map_[screen]; + } else { + NOTREACHED() << "Screen should be registered in InitializeScreenMap()"; + current_screen_ = SCREEN_UNKNOWN; + } } } // namespace chromeos diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h index a45bb82..291c42f 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h @@ -48,6 +48,7 @@ class OobeUI : public OobeDisplay, SCREEN_ACCOUNT_PICKER, SCREEN_USER_IMAGE_PICKER, SCREEN_TMP_ERROR, + SCREEN_PASSWORD_CHANGED, SCREEN_UNKNOWN }; @@ -60,6 +61,7 @@ class OobeUI : public OobeDisplay, static const char kScreenAccountPicker[]; static const char kScreenUserImagePicker[]; static const char kScreenTpmError[]; + static const char kScreenPasswordChanged[]; explicit OobeUI(content::WebUI* web_ui); virtual ~OobeUI(); 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 1ec0571..88aa39e 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc @@ -503,7 +503,8 @@ void SigninScreenHandler::OnBrowsingDataRemoverDone() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); cookie_remover_ = NULL; cookies_cleared_ = true; - ShowSigninScreenIfReady(); + cookie_remover_callback_.Run(); + cookie_remover_callback_.Reset(); } void SigninScreenHandler::OnCapsLockChange(bool enabled) { @@ -753,6 +754,10 @@ void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) { ShowSigninScreenIfReady(); } else { StartClearingDnsCache(); + + cookie_remover_callback_ = base::Bind( + &SigninScreenHandler::ShowSigninScreenIfReady, + weak_factory_.GetWeakPtr()); StartClearingCookies(); } } @@ -987,11 +992,10 @@ void SigninScreenHandler::HandleLoginVisible(const base::ListValue* args) { void SigninScreenHandler::HandleCancelPasswordChangedFlow( const base::ListValue* args) { - if (delegate_) { - // TODO(nkostylev): Cleanup cookies / cache. http://crbug.com/124699 - Show(oobe_ui_); - delegate_->CancelPasswordChangedFlow(); - } + cookie_remover_callback_ = base::Bind( + &SigninScreenHandler::CancelPasswordChangedFlowInternal, + weak_factory_.GetWeakPtr()); + StartClearingCookies(); } void SigninScreenHandler::HandleMigrateUserData(const base::ListValue* args) { @@ -1110,4 +1114,11 @@ void SigninScreenHandler::SendState(const std::string& callback, state_value, network_value, reason_value, last_network_value); } +void SigninScreenHandler::CancelPasswordChangedFlowInternal() { + if (delegate_) { + Show(oobe_ui_); + delegate_->CancelPasswordChangedFlow(); + } +} + } // namespace chromeos 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 7828937..ba9a1f5b 100644 --- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h @@ -7,6 +7,7 @@ #include <string> +#include "base/callback.h" #include "base/hash_tables.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" @@ -278,6 +279,10 @@ class SigninScreenHandler const std::string& reason, ConnectionType last_network_type); + // Cancels password changed flow - switches back to login screen. + // Called as a callback after cookies are cleared. + void CancelPasswordChangedFlowInternal(); + // A delegate that glues this handler with backend LoginDisplay. SigninScreenHandlerDelegate* delegate_; @@ -327,6 +332,7 @@ class SigninScreenHandler std::string test_pass_; BrowsingDataRemover* cookie_remover_; + base::Closure cookie_remover_callback_; base::WeakPtrFactory<SigninScreenHandler> weak_factory_; |