Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2011)

Unified Diff: chrome/browser/resources/chromeos/login/screen_gaia_signin.js

Issue 1074183002: [cros New-GAIA] Fix load animation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: refactor Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/chromeos/login/screen_gaia_signin.js
diff --git a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
index 9e1bfef194313d66ad2abe023e6124410bcd3ffb..31f539a786d85b1e378a6c89c40ec83ffc87b975 100644
--- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
+++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
@@ -11,6 +11,11 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
// lazy portal check should be fired.
/** @const */ var GAIA_LOADING_PORTAL_SUSSPECT_TIME_SEC = 7;
+ // GAIA animation guard timer. Started when GAIA page is loaded
+ // (Authenticator 'ready' event) and is intended to guard against edge cases
+ // when 'showView' message is not generated/received.
+ /** @const */ var GAIA_ANIMATION_GUARD_MILLISEC = 300;
+
// Maximum Gaia loading time in seconds.
/** @const */ var MAX_GAIA_LOADING_TIME_SEC = 60;
@@ -78,6 +83,22 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
loadingTimer_: undefined,
/**
+ * Timer id of a guard timer that is fired in case 'showView' message
+ * is not received from GAIA.
+ * @type {number}
+ * @private
+ */
+ loadAnimationGuardTimer_: undefined,
+
+ /**
+ * Whether we've processed 'showView' message - either from GAIA or from
+ * guard timer.
+ * @type {boolean}
+ * @private
+ */
+ showViewProcessed_: undefined,
+
+ /**
* Whether user can cancel Gaia screen.
* @type {boolean}
* @private
@@ -220,6 +241,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
$('enterprise-info-container').hidden = show;
$('gaia-signin-divider').hidden = show;
this.classList.toggle('loading', show);
+ $('signin-frame').classList.remove('show');
if (!show)
this.classList.remove('auth-completed');
},
@@ -232,7 +254,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
if (this != Oobe.getInstance().currentScreen)
return;
chrome.send('showLoadingTimeoutError');
- this.loadingTimer_ = window.setTimeout(
+ this.loadingTimer_ = setTimeout(
this.onLoadingTimeOut_.bind(this),
(MAX_GAIA_LOADING_TIME_SEC - GAIA_LOADING_PORTAL_SUSSPECT_TIME_SEC) *
1000);
@@ -253,7 +275,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
*/
clearLoadingTimer_: function() {
if (this.loadingTimer_) {
- window.clearTimeout(this.loadingTimer_);
+ clearTimeout(this.loadingTimer_);
this.loadingTimer_ = undefined;
}
},
@@ -264,12 +286,43 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
*/
startLoadingTimer_: function() {
this.clearLoadingTimer_();
- this.loadingTimer_ = window.setTimeout(
+ this.loadingTimer_ = setTimeout(
this.onLoadingSuspiciouslyLong_.bind(this),
GAIA_LOADING_PORTAL_SUSSPECT_TIME_SEC * 1000);
},
/**
+ * Handler for GAIA animation guard timer.
+ * @private
+ */
+ onLoadAnimationGuardTimer_: function() {
+ this.loadAnimationGuardTimer_ = undefined;
+ this.onShowView_();
+ },
+
+ /**
+ * Clears GAIA animation guard timer.
+ * @private
+ */
+ clearLoadAnimationGuardTimer_: function() {
+ if (this.loadAnimationGuardTimer_) {
+ clearTimeout(this.loadAnimationGuardTimer_);
+ this.loadAnimationGuardTimer_ = undefined;
+ }
+ },
+
+ /**
+ * Sets up GAIA animation guard timer.
+ * @private
+ */
+ startLoadAnimationGuardTimer_: function() {
+ this.clearLoadAnimationGuardTimer_();
+ this.loadAnimationGuardTimer_ = setTimeout(
+ this.onLoadAnimationGuardTimer_.bind(this),
+ GAIA_ANIMATION_GUARD_MILLISEC);
+ },
+
+ /**
* Whether Gaia is loading.
* @type {boolean}
*/
@@ -496,17 +549,15 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
* @private
*/
onAuthReady_: function() {
- this.loading = false;
- this.clearLoadingTimer_();
+ showViewProcessed_ = false;
+ if (this.isNewGaiaFlow)
+ this.startLoadAnimationGuardTimer_();
- // Show deferred error bubble.
- if (this.errorBubble_) {
- this.showErrorBubble(this.errorBubble_[0], this.errorBubble_[1]);
- this.errorBubble_ = undefined;
- }
+ this.clearLoadingTimer_();
+ this.loading = false;
- chrome.send('loginWebuiReady');
- chrome.send('loginVisible', ['gaia-signin']);
+ if (!this.isNewGaiaFlow)
+ this.onLoginUIVisible_();
// Warm up the user images screen.
Oobe.getInstance().preloadScreen({id: SCREEN_USER_IMAGE_PICKER});
@@ -539,11 +590,33 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
},
/**
- * Invoked when the auth host emits 'showView' event.
+ * Invoked when the auth host emits 'showView' event or when corresponding
+ * guard time fires.
* @private
*/
onShowView_: function(e) {
+ if (showViewProcessed_)
+ return;
+
+ showViewProcessed_ = true;
+ this.clearLoadAnimationGuardTimer_();
$('signin-frame').classList.add('show');
+ this.onLoginUIVisible_();
+ },
+
+ /**
+ * Called when UI is shown.
+ * @private
+ */
+ onLoginUIVisible_: function() {
+ // Show deferred error bubble.
+ if (this.errorBubble_) {
+ this.showErrorBubble(this.errorBubble_[0], this.errorBubble_[1]);
+ this.errorBubble_ = undefined;
+ }
+
+ chrome.send('loginWebuiReady');
+ chrome.send('loginVisible', ['gaia-signin']);
},
/**
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698