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

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: Fix test. 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 <include src="saml_handler.js"> 5 <include src="saml_handler.js">
6 6
7 /** 7 /**
8 * @fileoverview An UI component to authenciate to Chrome. The component hosts 8 * @fileoverview An UI component to authenciate to Chrome. The component hosts
9 * IdP web pages in a webview. A client who is interested in monitoring 9 * IdP web pages in a webview. A client who is interested in monitoring
10 * authentication events should pass a listener object of type 10 * authentication events should pass a listener object of type
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 'message', this.onMessageFromWebview_.bind(this), false); 138 'message', this.onMessageFromWebview_.bind(this), false);
139 window.addEventListener( 139 window.addEventListener(
140 'focus', this.onFocus_.bind(this), false); 140 'focus', this.onFocus_.bind(this), false);
141 window.addEventListener( 141 window.addEventListener(
142 'popstate', this.onPopState_.bind(this), false); 142 'popstate', this.onPopState_.bind(this), false);
143 } 143 }
144 144
145 Authenticator.prototype = Object.create(cr.EventTarget.prototype); 145 Authenticator.prototype = Object.create(cr.EventTarget.prototype);
146 146
147 /** 147 /**
148 * Reinitializes authentication parameters so that a failed login attempt
149 * would not result in an infinite loop.
150 */
151 Authenticator.prototype.clearCredentials_ = function() {
152 this.email_ = null;
153 this.gaiaId_ = null;
154 this.password_ = null;
155 this.oauth_code_ = null;
156 this.chooseWhatToSync_ = false;
157 this.skipForNow_ = false;
158 this.sessionIndex_ = null;
159 this.trusted_ = true;
160 this.authFlow = AuthFlow.DEFAULT;
161 this.samlHandler_.reset();
162 this.loaded_ = false;
163 };
164
165 /**
148 * Loads the authenticator component with the given parameters. 166 * Loads the authenticator component with the given parameters.
149 * @param {AuthMode} authMode Authorization mode. 167 * @param {AuthMode} authMode Authorization mode.
150 * @param {Object} data Parameters for the authorization flow. 168 * @param {Object} data Parameters for the authorization flow.
151 */ 169 */
152 Authenticator.prototype.load = function(authMode, data) { 170 Authenticator.prototype.load = function(authMode, data) {
171 this.clearCredentials_();
153 this.idpOrigin_ = data.gaiaUrl || IDP_ORIGIN; 172 this.idpOrigin_ = data.gaiaUrl || IDP_ORIGIN;
154 this.continueUrl_ = data.continueUrl || CONTINUE_URL; 173 this.continueUrl_ = data.continueUrl || CONTINUE_URL;
155 this.continueUrlWithoutParams_ = 174 this.continueUrlWithoutParams_ =
156 this.continueUrl_.substring(0, this.continueUrl_.indexOf('?')) || 175 this.continueUrl_.substring(0, this.continueUrl_.indexOf('?')) ||
157 this.continueUrl_; 176 this.continueUrl_;
158 this.isConstrainedWindow_ = data.constrained == '1'; 177 this.isConstrainedWindow_ = data.constrained == '1';
159 this.isMinuteMaidChromeOS = data.isMinuteMaidChromeOS; 178 this.isMinuteMaidChromeOS = data.isMinuteMaidChromeOS;
160 179
161 this.initialFrameUrl_ = this.constructInitialFrameUrl_(data); 180 this.initialFrameUrl_ = this.constructInitialFrameUrl_(data);
162 this.reloadUrl_ = data.frameUrl || this.initialFrameUrl_; 181 this.reloadUrl_ = data.frameUrl || this.initialFrameUrl_;
163 this.authFlow = AuthFlow.DEFAULT;
164 this.samlHandler_.reset();
165 // Don't block insecure content for desktop flow because it lands on 182 // Don't block insecure content for desktop flow because it lands on
166 // http. Otherwise, block insecure content as long as gaia is https. 183 // http. Otherwise, block insecure content as long as gaia is https.
167 this.samlHandler_.blockInsecureContent = authMode != AuthMode.DESKTOP && 184 this.samlHandler_.blockInsecureContent = authMode != AuthMode.DESKTOP &&
168 this.idpOrigin_.indexOf('https://') == 0; 185 this.idpOrigin_.indexOf('https://') == 0;
169 186
170 this.webview_.src = this.reloadUrl_; 187 this.webview_.src = this.reloadUrl_;
171
172 this.loaded_ = false;
173 }; 188 };
174 189
175 /** 190 /**
176 * Reloads the authenticator component. 191 * Reloads the authenticator component.
177 */ 192 */
178 Authenticator.prototype.reload = function() { 193 Authenticator.prototype.reload = function() {
194 this.clearCredentials_();
179 this.webview_.src = this.reloadUrl_; 195 this.webview_.src = this.reloadUrl_;
180 this.authFlow = AuthFlow.DEFAULT;
181 this.samlHandler_.reset();
182 this.loaded_ = false;
183 }; 196 };
184 197
185 Authenticator.prototype.constructInitialFrameUrl_ = function(data) { 198 Authenticator.prototype.constructInitialFrameUrl_ = function(data) {
186 var url = this.idpOrigin_ + (data.gaiaPath || IDP_PATH); 199 var url = this.idpOrigin_ + (data.gaiaPath || IDP_PATH);
187 200
188 if (this.isMinuteMaidChromeOS) { 201 if (this.isMinuteMaidChromeOS) {
189 if (data.chromeType) 202 if (data.chromeType)
190 url = appendParam(url, 'chrometype', data.chromeType); 203 url = appendParam(url, 'chrometype', data.chromeType);
191 if (data.clientId) 204 if (data.clientId)
192 url = appendParam(url, 'client_id', data.clientId); 205 url = appendParam(url, 'client_id', data.clientId);
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 Authenticator.AuthFlow = AuthFlow; 539 Authenticator.AuthFlow = AuthFlow;
527 Authenticator.AuthMode = AuthMode; 540 Authenticator.AuthMode = AuthMode;
528 Authenticator.SUPPORTED_PARAMS = SUPPORTED_PARAMS; 541 Authenticator.SUPPORTED_PARAMS = SUPPORTED_PARAMS;
529 542
530 return { 543 return {
531 // TODO(guohui, xiyuan): Rename GaiaAuthHost to Authenticator once the old 544 // TODO(guohui, xiyuan): Rename GaiaAuthHost to Authenticator once the old
532 // iframe-based flow is deprecated. 545 // iframe-based flow is deprecated.
533 GaiaAuthHost: Authenticator 546 GaiaAuthHost: Authenticator
534 }; 547 };
535 }); 548 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698