Chromium Code Reviews| 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 05abdf5fd1e912e8064a1794d9ccd77143431a34..321bfd1eac0fb2f4d8a65ef277464c7af6985087 100644 |
| --- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js |
| +++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js |
| @@ -27,6 +27,16 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| // online. |
| /** @const */ var IDLE_TIME_CHECK_FREQUENCY = 5 * 1000; |
| + /** |
| + * The modes this screen can be in. |
| + * @enum {integer} |
| + */ |
| + var ScreenMode = { |
| + DEFAULT: 0, // Default GAIA login flow. |
| + OFFLINE: 1, // GAIA offline login. |
| + SAML_INTERSTITIAL: 2 // Interstitial page before SAML redirection. |
| + }; |
| + |
| return { |
| EXTERNAL_API: [ |
| 'loadAuthExtension', |
| @@ -44,11 +54,11 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| gaiaAuthParams_: null, |
| /** |
| - * Whether offline version of Gaia page is used. |
| - * @type {boolean} |
| + * Current mode of this screen. |
| + * @type {integer} |
| * @private |
| */ |
| - isOffline_: false, |
| + screenMode_: ScreenMode.DEFAULT, |
| /** |
| * Email of the user, which is logging in using offline mode. |
| @@ -77,7 +87,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * @type {boolean} |
| * @private |
| */ |
| - showViewProcessed_: undefined, |
| + showViewProcessed_: false, |
| /** |
| * Whether we've processed 'authCompleted' message. |
| @@ -98,7 +108,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * @type {boolean} |
| */ |
| get closable() { |
| - return !!$('pod-row').pods.length || this.isOffline; |
| + return !!$('pod-row').pods.length || this.isOffline(); |
| }, |
| /** |
| @@ -126,12 +136,14 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| !this.isSAML(); |
| this.navigation_.refreshVisible = |
| - !this.closable && this.isAtTheBeginning(); |
| + !this.closable && this.isAtTheBeginning() && |
| + this.screenMode_ != ScreenMode.SAML_INTERSTITIAL; |
| this.navigation_.closeVisible = |
| !this.navigation_.refreshVisible && |
| !isWhitelistError && |
| - !this.authCompleted; |
| + !this.authCompleted && |
| + this.screenMode_ != ScreenMode.SAML_INTERSTITIAL; |
| $('login-header-bar').updateUI_(); |
| }, |
| @@ -174,7 +186,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| var frameFilter = function(callback) { |
| return function(e) { |
| var isEventOffline = frame === $('offline-gaia'); |
| - if (isEventOffline === that.isOffline) |
| + if (isEventOffline === that.isOffline()) |
| callback.call(that, e); |
| }; |
| }; |
| @@ -228,6 +240,39 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| $('gaia-whitelist-error').addEventListener('linkclick', function() { |
| chrome.send('launchHelpApp', [HELP_CANT_ACCESS_ACCOUNT]); |
| }); |
| + |
| + // Register handlers for the saml interstitial page events. |
| + $('saml-interstitial').addEventListener('samlPageNextClicked', |
| + function() { |
| + if (this.screenMode_ != ScreenMode.SAML_INTERSTITIAL) |
|
xiyuan
2016/03/28 20:58:40
nit: seem unnecessary since the event could only b
afakhry
2016/03/28 23:15:32
I was just being paranoid! :)
Done.
|
| + return; |
| + |
| + this.screenMode = ScreenMode.DEFAULT; |
| + this.loadGaiaAuthHost_(true /* doSamlRedirect */); |
| + }.bind(this)); |
| + $('saml-interstitial').addEventListener('samlPageChangeAccountClicked', |
| + function() { |
| + if (this.screenMode_ != ScreenMode.SAML_INTERSTITIAL) |
|
xiyuan
2016/03/28 20:58:40
nit: ditto
afakhry
2016/03/28 23:15:32
Done.
|
| + return; |
| + |
| + this.screenMode = ScreenMode.DEFAULT; |
| + this.loadGaiaAuthHost_(false /* doSamlRedirect */); |
| + }.bind(this)); |
| + }, |
| + |
| + /** |
| + * Loads the authenticator and updates the UI to reflect the loading state. |
| + * @param {boolean} doSamlRedirect If the authenticator should do |
| + * authentication by automatic redirection to the SAML-based enrollment |
|
xiyuan
2016/03/28 20:58:40
nit: wrong indent
afakhry
2016/03/28 23:15:32
Done.
xiyuan
2016/03/29 02:10:49
What you did in new patch is fine but I meant to i
afakhry
2016/03/29 03:12:02
Done.
|
| + * enterprise domain IdP. |
| + */ |
| + loadGaiaAuthHost_: function(doSamlRedirect) { |
| + this.loading = true; |
| + this.startLoadingTimer_(); |
| + |
| + this.gaiaAuthParams_.doSamlRedirect = doSamlRedirect; |
| + this.gaiaAuthHost_.load(cr.login.GaiaAuthHost.AuthMode.DEFAULT, |
| + this.gaiaAuthParams_); |
| }, |
| /** |
| @@ -242,19 +287,36 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * Returns true if offline version of Gaia is used. |
| * @type {boolean} |
| */ |
| - get isOffline() { |
| - return this.isOffline_; |
| - }, |
| + isOffline: function() { |
| + return this.screenMode_ == ScreenMode.OFFLINE; |
| + }, |
| + |
| + /** |
| + * Sets the current screen mode and updates the visible elements |
| + * accordingly. |
| + * @param {integer} value The screen mode. |
| + */ |
| + set screenMode(value) { |
| + this.screenMode_ = value; |
| + switch (this.screenMode_) { |
| + case ScreenMode.DEFAULT: |
| + $('signin-frame').hidden = false; |
| + $('offline-gaia').hidden = true; |
| + $('saml-interstitial').hidden = true; |
| + break; |
| + case ScreenMode.OFFLINE: |
| + $('signin-frame').hidden = true; |
| + $('offline-gaia').hidden = false; |
| + $('saml-interstitial').hidden = true; |
| + break; |
| + case ScreenMode.SAML_INTERSTITIAL: |
| + $('signin-frame').hidden = true; |
| + $('offline-gaia').hidden = true; |
| + $('saml-interstitial').hidden = false; |
| + break; |
| + } |
|
xiyuan
2016/03/28 20:58:40
Should we call this.updateControlsState() since |s
afakhry
2016/03/28 23:15:32
Done.
|
| - /** |
| - * Sets whether offline version of Gaia is used. |
| - * @param {boolean} value Whether offline version of Gaia is used. |
| - */ |
| - set isOffline(value) { |
| - this.isOffline_ = !!value; |
| - $('signin-frame').hidden = this.isOffline_; |
| - $('offline-gaia').hidden = !this.isOffline_; |
| - chrome.send('updateOfflineLogin', [value]); |
| + chrome.send('updateOfflineLogin', [this.isOffline()]); |
| }, |
| /** |
| @@ -287,8 +349,10 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| if (shouldMonitor) { |
| // If we're not using the offline login page or we're already |
| // monitoring, then we don't need to do anything. |
| - if (!self.isOffline || self.tryToGoToOnlineLoginPageCallbackId_ !== -1) |
| + if (!self.isOffline() || |
| + self.tryToGoToOnlineLoginPageCallbackId_ !== -1) { |
| return; |
| + } |
| self.mostRecentUserActivity_ = Date.now(); |
| ACTIVITY_EVENTS.forEach(function(event) { |
| @@ -298,7 +362,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| self.tryToGoToOnlineLoginPageCallbackId_ = setInterval(function() { |
| // If we're not in the offline page or the signin page, then we want |
| // to terminate monitoring. |
| - if (!self.isOffline || |
| + if (!self.isOffline() || |
| Oobe.getInstance().currentScreen.id != 'gaia-signin') { |
| self.monitorOfflineIdle(false); |
| return; |
| @@ -333,9 +397,10 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| */ |
| showLoadingUI_: function(show) { |
| $('gaia-loading').hidden = !show; |
| - this.getSigninFrame_().hidden = show; |
| + if (this.screenMode_ != ScreenMode.DEFAULT) |
| + this.getSigninFrame_().hidden = show; |
| + this.getSigninFrame_().classList.toggle('show', !show); |
| this.classList.toggle('loading', show); |
| - $('signin-frame').classList.remove('show'); |
| this.updateControlsState(); |
| }, |
| @@ -422,6 +487,8 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * page. |
| */ |
| onBeforeShow: function(data) { |
| + this.screenMode = ScreenMode.DEFAULT; |
| + this.loading = true; |
| chrome.send('loginUIStateChanged', ['gaia-signin', true]); |
| $('progress-dots').hidden = true; |
| $('login-header-bar').signinUIState = SIGNIN_UI_STATE.GAIA_SIGNIN; |
| @@ -431,8 +498,6 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| chrome.send('loginVisible', ['gaia-loading']); |
| }); |
| - this.classList.toggle('loading', this.loading); |
| - |
| // Button header is always visible when sign in is presented. |
| // Header is hidden once GAIA reports on successful sign in. |
| Oobe.getInstance().headerHidden = false; |
| @@ -442,7 +507,14 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| }, |
| getSigninFrame_: function() { |
| - return this.isOffline ? $('offline-gaia') : $('signin-frame'); |
| + switch (this.screenMode_) { |
| + case ScreenMode.DEFAULT: |
| + return $('signin-frame'); |
| + case ScreenMode.OFFLINE: |
| + return $('offline-gaia'); |
| + case ScreenMode.SAML_INTERSTITIAL: |
| + return $('saml-interstitial'); |
| + } |
| }, |
| focusSigninFrame: function() { |
| @@ -469,14 +541,11 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * @private |
| */ |
| loadAuthExtension: function(data) { |
| - this.isOffline = data.useOffline; |
| + this.screenMode = data.screenMode; |
| this.email = ''; |
| this.authCompleted_ = false; |
| this.lastBackMessageValue_ = false; |
| - |
| - // Reset SAML |
| - this.classList.toggle('full-width', false); |
| - this.samlPasswordConfirmAttempt_ = 0; |
| + $('saml-interstitial').domain = data.enterpriseDomain; |
|
xiyuan
2016/03/28 20:58:40
nit: Move this into "case ScreenMode.SAML_INTERSTI
afakhry
2016/03/28 23:15:32
Done.
|
| this.updateAuthExtension_(data); |
| @@ -487,10 +556,9 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| params[name] = data[name]; |
| } |
| - if (data.enterpriseInfoMessage) |
| - params.enterpriseInfoMessage = data.enterpriseInfoMessage; |
| - |
| params.isNewGaiaFlow = true; |
| + params.doSamlRedirect = |
| + (this.screenMode_ == ScreenMode.SAML_INTERSTITIAL); |
|
xiyuan
2016/03/28 20:58:40
nit: wrong indent?
afakhry
2016/03/28 23:15:32
Done.
|
| // Screen size could have been changed because of 'full-width' classes. |
| if (Oobe.getInstance().currentScreen === this) |
| @@ -499,14 +567,20 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| if (data.forceReload || |
| JSON.stringify(this.gaiaAuthParams_) != JSON.stringify(params)) { |
| this.gaiaAuthParams_ = params; |
| - this.loading = true; |
| - this.startLoadingTimer_(); |
| - if (this.isOffline) { |
| - this.loadOffline(params); |
| - } else { |
| - this.gaiaAuthHost_.load(cr.login.GaiaAuthHost.AuthMode.DEFAULT, |
| - params); |
| + switch (this.screenMode_) { |
| + case ScreenMode.DEFAULT: |
| + this.loadGaiaAuthHost_(false /* doSamlRedirect */); |
| + break; |
| + |
| + case ScreenMode.OFFLINE: |
| + this.loadOffline(params); |
| + break; |
| + |
| + case ScreenMode.SAML_INTERSTITIAL: |
| + if (this.loading) |
| + this.loading = false; |
| + break; |
| } |
| } |
| this.updateControlsState(); |
| @@ -524,7 +598,9 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| this.updateControlsState(); |
| + // Reset SAML |
| this.classList.toggle('full-width', false); |
| + this.samlPasswordConfirmAttempt_ = 0; |
| if (Oobe.getInstance().currentScreen === this) |
| Oobe.getInstance().updateScreenSize(this); |
| }, |
| @@ -552,6 +628,9 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| onAuthFlowChange_: function() { |
| var isSAML = this.isSAML(); |
| + if (isSAML && this.loading) |
|
xiyuan
2016/03/28 20:58:40
Think we should fix this in authenticator.js. That
afakhry
2016/03/28 23:15:32
Done.
|
| + this.onAuthReady_(); |
| + |
| this.classList.toggle('full-width', isSAML); |
| $('saml-notice-container').hidden = !isSAML; |
| @@ -567,7 +646,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * @private |
| */ |
| onAuthReady_: function() { |
| - showViewProcessed_ = false; |
| + this.showViewProcessed_ = false; |
| this.startLoadAnimationGuardTimer_(); |
| this.clearLoadingTimer_(); |
| this.loading = false; |
| @@ -608,12 +687,12 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * @private |
| */ |
| onShowView_: function(e) { |
| - if (showViewProcessed_) |
| + if (this.showViewProcessed_) |
| return; |
| - showViewProcessed_ = true; |
| + this.showViewProcessed_ = true; |
| this.clearLoadAnimationGuardTimer_(); |
| - $('signin-frame').classList.add('show'); |
| + this.getSigninFrame_().classList.toggle('show', true); |
| this.onLoginUIVisible_(); |
| }, |
| @@ -804,7 +883,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| reset: function(takeFocus, forceOnline) { |
| // Reload and show the sign-in UI if needed. |
| if (takeFocus) { |
| - if (!forceOnline && this.isOffline) { |
| + if (!forceOnline && this.isOffline()) { |
| // Show 'Cancel' button to allow user to return to the main screen |
| // (e.g. this makes sense when connection is back). |
| Oobe.getInstance().headerHidden = false; |
| @@ -820,7 +899,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * Reloads extension frame. |
| */ |
| doReload: function() { |
| - if (this.isOffline) |
| + if (this.isOffline()) |
| return; |
| this.gaiaAuthHost_.reload(); |
| this.loading = true; |
| @@ -836,7 +915,7 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * @param {HTMLElement} content Content to show in bubble. |
| */ |
| showErrorBubble: function(loginAttempts, error) { |
| - if (this.isOffline) { |
| + if (this.isOffline()) { |
| $('add-user-button').hidden = true; |
| // Reload offline version of the sign-in extension, which will show |
| // error itself. |
| @@ -890,9 +969,10 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() { |
| * should switch to the password screen with error. |
| */ |
| loadOffline: function(params) { |
| + this.loading = true; |
| + this.startLoadingTimer_(); |
| var offlineLogin = $('offline-gaia'); |
| - if ('enterpriseInfoMessage' in params) |
| - offlineLogin.enterpriseInfo = params['enterpriseInfoMessage']; |
| + offlineLogin.showEnterpriseMessage = !!('enterpriseDomain' in params); |
| if ('emailDomain' in params) |
| offlineLogin.emailDomain = '@' + params['emailDomain']; |
| offlineLogin.setEmail(params.email); |