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

Side by Side Diff: chrome/browser/resources/gaia_auth_host/authenticator.js

Issue 1012083002: Resolve new GAIA flow's infinite loop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview An UI component to authenciate to Chrome. The component hosts 6 * @fileoverview An UI component to authenciate to Chrome. The component hosts
7 * IdP web pages in a webview. A client who is interested in monitoring 7 * IdP web pages in a webview. A client who is interested in monitoring
8 * authentication events should pass a listener object of type 8 * authentication events should pass a listener object of type
9 * cr.login.GaiaAuthHost.Listener as defined in this file. After initialization, 9 * cr.login.GaiaAuthHost.Listener as defined in this file. After initialization,
10 * call {@code load} to start the authentication flow. 10 * call {@code load} to start the authentication flow.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 'focus', this.onFocus_.bind(this), false); 118 'focus', this.onFocus_.bind(this), false);
119 window.addEventListener( 119 window.addEventListener(
120 'popstate', this.onPopState_.bind(this), false); 120 'popstate', this.onPopState_.bind(this), false);
121 } 121 }
122 122
123 // TODO(guohui,xiyuan): no need to inherit EventTarget once we deprecate the 123 // TODO(guohui,xiyuan): no need to inherit EventTarget once we deprecate the
124 // old event-based signin flow. 124 // old event-based signin flow.
125 Authenticator.prototype = Object.create(cr.EventTarget.prototype); 125 Authenticator.prototype = Object.create(cr.EventTarget.prototype);
126 126
127 /** 127 /**
128 * Reinitializes authentication parameters so that a failed login attempt
129 * would not result in an infinite loop.
130 */
131 Authenticator.prototype.clearCredentials_ = function() {
Roman Sorokin (ftl) 2015/03/17 17:00:41 Could we call this function in the constructor? We
Ivan Podogov 2015/03/18 07:36:20 That was my initial thought, but Dmitry asked me t
132 this.email_ = null;
133 this.gaiaId_ = null;
134 this.password_ = null;
135 this.oauth_code_ = null;
136 this.chooseWhatToSync_ = false;
137 this.skipForNow_ = false;
138 this.sessionIndex_ = null;
139 this.trusted_ = true;
140 this.authFlow_ = AuthFlow.DEFAULT;
141 this.loaded_ = false;
142 };
143
144 /**
128 * Loads the authenticator component with the given parameters. 145 * Loads the authenticator component with the given parameters.
129 * @param {AuthMode} authMode Authorization mode. 146 * @param {AuthMode} authMode Authorization mode.
130 * @param {Object} data Parameters for the authorization flow. 147 * @param {Object} data Parameters for the authorization flow.
131 */ 148 */
132 Authenticator.prototype.load = function(authMode, data) { 149 Authenticator.prototype.load = function(authMode, data) {
150 this.clearCredentials_();
133 this.idpOrigin_ = data.gaiaUrl || IDP_ORIGIN; 151 this.idpOrigin_ = data.gaiaUrl || IDP_ORIGIN;
134 this.continueUrl_ = data.continueUrl || CONTINUE_URL; 152 this.continueUrl_ = data.continueUrl || CONTINUE_URL;
135 this.continueUrlWithoutParams_ = 153 this.continueUrlWithoutParams_ =
136 this.continueUrl_.substring(0, this.continueUrl_.indexOf('?')) || 154 this.continueUrl_.substring(0, this.continueUrl_.indexOf('?')) ||
137 this.continueUrl_; 155 this.continueUrl_;
138 this.isConstrainedWindow_ = data.constrained == '1'; 156 this.isConstrainedWindow_ = data.constrained == '1';
139 this.isMinuteMaidChromeOS = data.isMinuteMaidChromeOS; 157 this.isMinuteMaidChromeOS = data.isMinuteMaidChromeOS;
140 158
141 this.initialFrameUrl_ = this.constructInitialFrameUrl_(data); 159 this.initialFrameUrl_ = this.constructInitialFrameUrl_(data);
142 this.reloadUrl_ = data.frameUrl || this.initialFrameUrl_; 160 this.reloadUrl_ = data.frameUrl || this.initialFrameUrl_;
143 this.authFlow_ = AuthFlow.DEFAULT;
144 161
145 this.webview_.src = this.reloadUrl_; 162 this.webview_.src = this.reloadUrl_;
146
147 this.loaded_ = false;
148 }; 163 };
149 164
150 /** 165 /**
151 * Reloads the authenticator component. 166 * Reloads the authenticator component.
152 */ 167 */
153 Authenticator.prototype.reload = function() { 168 Authenticator.prototype.reload = function() {
169 this.clearCredentials_();
154 this.webview_.src = this.reloadUrl_; 170 this.webview_.src = this.reloadUrl_;
155 this.authFlow_ = AuthFlow.DEFAULT;
156 this.loaded_ = false;
157 }; 171 };
158 172
159 Authenticator.prototype.constructInitialFrameUrl_ = function(data) { 173 Authenticator.prototype.constructInitialFrameUrl_ = function(data) {
160 var url = this.idpOrigin_ + (data.gaiaPath || IDP_PATH); 174 var url = this.idpOrigin_ + (data.gaiaPath || IDP_PATH);
161 175
162 if (this.isMinuteMaidChromeOS) { 176 if (this.isMinuteMaidChromeOS) {
163 if (data.chromeType) 177 if (data.chromeType)
164 url = appendParam(url, 'chrometype', data.chromeType); 178 url = appendParam(url, 'chrometype', data.chromeType);
165 if (data.clientId) 179 if (data.clientId)
166 url = appendParam(url, 'client_id', data.clientId); 180 url = appendParam(url, 'client_id', data.clientId);
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 Authenticator.AuthFlow = AuthFlow; 417 Authenticator.AuthFlow = AuthFlow;
404 Authenticator.AuthMode = AuthMode; 418 Authenticator.AuthMode = AuthMode;
405 Authenticator.SUPPORTED_PARAMS = SUPPORTED_PARAMS; 419 Authenticator.SUPPORTED_PARAMS = SUPPORTED_PARAMS;
406 420
407 return { 421 return {
408 // TODO(guohui, xiyuan): Rename GaiaAuthHost to Authenticator once the old 422 // TODO(guohui, xiyuan): Rename GaiaAuthHost to Authenticator once the old
409 // iframe-based flow is deprecated. 423 // iframe-based flow is deprecated.
410 GaiaAuthHost: Authenticator 424 GaiaAuthHost: Authenticator
411 }; 425 };
412 }); 426 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698