Index: chrome/browser/resources/gaia_auth/main.js |
diff --git a/chrome/browser/resources/gaia_auth/main.js b/chrome/browser/resources/gaia_auth/main.js |
index 729c00c149a03dc058ac83630f3b7b9f71c111d2..894085e0fef64d45bd641c763bb9c143cfb599d8 100644 |
--- a/chrome/browser/resources/gaia_auth/main.js |
+++ b/chrome/browser/resources/gaia_auth/main.js |
@@ -214,9 +214,14 @@ Authenticator.prototype = { |
onAuthPageLoaded_: function(msg) { |
var isSAMLPage = msg.url.indexOf(this.gaiaUrl_) != 0; |
- // Set isSAMLFlow_ flag when a SAML page is loaded. The flag is sticky. |
- if (isSAMLPage) |
+ if (isSAMLPage && !this.isSAMLFlow_) { |
+ // GAIA redirected to a SAML login page. The credentials provided to this |
+ // page will determine what user gets logged in. The credentials obtained |
+ // from the GAIA login from are no longer relevant and can be discarded. |
this.isSAMLFlow_ = true; |
+ this.email_ = null; |
+ this.password_ = null; |
+ } |
window.parent.postMessage({ |
'method': 'authPageLoaded', |
@@ -248,6 +253,11 @@ Authenticator.prototype = { |
return; |
} |
+ // Retrieve the e-mail address of the user who just authenticated from GAIA. |
+ window.parent.postMessage({method: 'retrieveAuthenticatedUserEmail', |
+ attemptToken: this.attemptToken_}, |
+ this.parentPage_); |
+ |
this.samlSupportChannel_.sendWithCallback( |
{name: 'getScrapedPasswords'}, |
function(passwords) { |
@@ -263,13 +273,21 @@ Authenticator.prototype = { |
}.bind(this)); |
}, |
+ maybeCompleteSAMLLogin_: function() { |
+ // SAML login is complete when the user's e-mail address has been retrieved |
+ // from GAIA and the user has successfully confirmed the password. |
+ if (this.email_ !== null && this.password_ !== null) |
+ this.completeLogin(this.email_, this.password_); |
+ }, |
+ |
onVerifyConfirmedPassword_: function(password) { |
this.samlSupportChannel_.sendWithCallback( |
{name: 'getScrapedPasswords'}, |
function(passwords) { |
for (var i = 0; i < passwords.length; ++i) { |
if (passwords[i] == password) { |
- this.completeLogin(this.email_, passwords[i]); |
+ this.password_ = passwords[i]; |
+ this.maybeCompleteSAMLLogin_(); |
return; |
} |
} |
@@ -296,6 +314,12 @@ Authenticator.prototype = { |
this.onLoginUILoaded(); |
if (this.samlSupportChannel_) |
this.samlSupportChannel_.send({name: 'resetAuth'}); |
+ } else if (msg.method == 'setAuthenticatedUserEmail' && |
+ this.isParentMessage_(e)) { |
+ if (this.attemptToken_ == msg.attemptToken) { |
+ this.email_ = msg.email; |
+ this.maybeCompleteSAMLLogin_(); |
+ } |
} else if (msg.method == 'confirmLogin' && this.isInternalMessage_(e)) { |
if (this.attemptToken_ == msg.attemptToken) |
this.onConfirmLogin_(); |