1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @fileoverview An UI component to host gaia auth extension in an iframe. 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * After the component binds with an iframe, call its {@code load} to start the 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * authentication flow. There are two events would be raised after this point: 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * a 'ready' event when the authentication UI is ready to use and a 'completed' 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * event when the authentication is completed successfully. If caller is 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * interested in the user credentials, he may supply a success callback with 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * {@code load} call. The callback will be invoked when the authentication is 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * completed successfully and with the available credential data. 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)cr.define('cr.login', function() { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'use strict'; 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Base URL of gaia auth extension. 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var AUTH_URL_BASE = 'chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik'; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Auth URL to use for online flow. 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var AUTH_URL = AUTH_URL_BASE + '/main.html'; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Auth URL to use for offline flow. 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var OFFLINE_AUTH_URL = AUTH_URL_BASE + '/offline.html'; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Origin of the gaia sign in page. 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @const 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) var GAIA_ORIGIN = 'https://accounts.google.com'; 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Supported params of auth extension. For a complete list, check out the 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * auth extension's main.js. 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {!Array.<string>} 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var SUPPORTED_PARAMS = [ 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 'gaiaUrl', // Gaia url to use; 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'gaiaPath', // Gaia path to use without a leading slash; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'hl', // Language code for the user interface; 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'email', // Pre-fill the email field in Gaia UI; 548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 'service', // Name of Gaia service; 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'continueUrl', // Continue url to use; 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'frameUrl', // Initial frame URL to use. If empty defaults to gaiaUrl. 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'constrained' // Whether the extension is loaded in a constrained window; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ]; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Supported localized strings. For a complete list, check out the auth 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * extension's offline.js 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {!Array.<string>} 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @const 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var LOCALIZED_STRING_PARAMS = [ 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'stringSignIn', 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'stringEmail', 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'stringPassword', 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'stringEmptyEmail', 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'stringEmptyPassword', 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 'stringError' 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ]; 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Enum for the authorization mode, must match AuthMode defined in 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * chrome/browser/ui/webui/inline_login_ui.cc. 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @enum {number} 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) var AuthMode = { 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DEFAULT: 0, 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OFFLINE: 1, 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DESKTOP: 2 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Enum for the auth flow. 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @enum {number} 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var AuthFlow = { 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GAIA: 0, 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SAML: 1 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }; 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Creates a new gaia auth extension host. 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {HTMLIFrameElement|string} container The iframe element or its id 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * to host the auth extension. 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @constructor 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @extends {cr.EventTarget} 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) function GaiaAuthHost(container) { 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.frame_ = typeof container == 'string' ? $(container) : container; 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) assert(this.frame_); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) window.addEventListener('message', 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.onMessage_.bind(this), false); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GaiaAuthHost.prototype = { 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) __proto__: cr.EventTarget.prototype, 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * An url to use with {@code reload}. 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {?string} 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reloadUrl_: null, 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * The domain name of the current auth page. 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @type {string} 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) authDomain: '', 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Invoked when authentication is completed successfully with credential 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * data. A credential data object looks like this: 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * <pre> 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * {@code 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * { 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * email: 'xx@gmail.com', 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * password: 'xxxx', // May not present 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * authCode: 'x/xx', // May not present 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * authMode: 'x', // Authorization mode, default/offline/desktop. 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * } 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * } 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * </pre> 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {function(Object)} 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) successCallback_: null, 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Invoked when GAIA indicates login success and SAML was used. At this 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * point, GAIA cookies are present but the identity of the authenticated 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * user is not known. The embedder of GaiaAuthHost should extract the GAIA 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * cookies from the cookie jar, query GAIA for the authenticated user's 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * e-mail address and invoke GaiaAuthHost.setAuthenticatedUserEmail with the 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * result. The argument is an opaque token that should be passed back to 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * GaiaAuthHost.setAuthenticatedUserEmail. 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @type {function(number)} 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) retrieveAuthenticatedUserEmailCallback_: null, 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 156d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Invoked when the auth flow needs a user to confirm his/her passwords. 157d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * This could happen when there are more than one passwords scraped during 158d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * SAML flow. The embedder of GaiaAuthHost should show an UI to collect a 159d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * password from user then call GaiaAuthHost.verifyConfirmedPassword to 160d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * verify. If the password is good, the auth flow continues with success 161d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * path. Otherwise, confirmPasswordCallback_ is invoked again. 162d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * @type {function()} 163d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */ 164d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) confirmPasswordCallback_: null, 165d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 166d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) /** 167d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Similar to confirmPasswordCallback_ but is used when there is no 168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * password scraped after a success authentication. The authenticated user 169d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * account is passed to the callback. The embedder should take over the 170d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * flow and decide what to do next. 171d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * @type {function(string)} 172d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */ 173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) noPasswordCallback_: null, 174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 175d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) /** 176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Invoked when the authentication flow had to be aborted because content 177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * served over an unencrypted connection was detected. 178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch insecureContentBlockedCallback_: null, 179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch /** 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The iframe container. 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {HTMLIFrameElement} 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get frame() { 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return this.frame_; 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Sets retrieveAuthenticatedUserEmailCallback_. 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @type {function()} 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) set retrieveAuthenticatedUserEmailCallback(callback) { 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.retrieveAuthenticatedUserEmailCallback_ = callback; 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 197d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Sets confirmPasswordCallback_. 198d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * @type {function()} 199d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */ 200d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) set confirmPasswordCallback(callback) { 201d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) this.confirmPasswordCallback_ = callback; 202d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, 203d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 204d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) /** 205d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Sets noPasswordCallback_. 206d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * @type {function()} 207d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */ 208d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) set noPasswordCallback(callback) { 209d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) this.noPasswordCallback_ = callback; 210d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, 211d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 212d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) /** 213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Sets insecureContentBlockedCallback_. 214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * @type {function(string)} 215c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch */ 216c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch set insecureContentBlockedCallback(callback) { 217c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch this.insecureContentBlockedCallback_ = callback; 218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }, 219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch /** 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Loads the auth extension. 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @param {AuthMode} authMode Authorization mode. 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Object} data Parameters for the auth extension. See the auth 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * extension's main.js for all supported params and their defaults. 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {function(Object)} successCallback A function to be called when 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * the authentication is completed successfully. The callback is 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * invoked with a credential object. 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) load: function(authMode, data, successCallback) { 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var params = []; 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var populateParams = function(nameList, values) { 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!values) 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (var i in nameList) { 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var name = nameList[i]; 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (values[name]) 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.push(name + '=' + encodeURIComponent(values[name])); 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) populateParams(SUPPORTED_PARAMS, data); 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) populateParams(LOCALIZED_STRING_PARAMS, data.localizedStrings); 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.push('parentPage=' + encodeURIComponent(window.location.origin)); 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) var url; 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) switch (authMode) { 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) case AuthMode.OFFLINE: 2504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) url = OFFLINE_AUTH_URL; 2514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) break; 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case AuthMode.DESKTOP: 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url = AUTH_URL; 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) params.push('desktopMode=1'); 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) break; 2564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) default: 2574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) url = AUTH_URL; 2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url += '?' + params.join('&'); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.frame_.src = url; 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.reloadUrl_ = url; 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.successCallback_ = successCallback; 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.authFlow = AuthFlow.GAIA; 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Reloads the auth extension. 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reload: function() { 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.frame_.src = this.reloadUrl_; 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.authFlow = AuthFlow.GAIA; 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 276d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Verifies the supplied password by sending it to the auth extension, 277d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * which will then check if it matches the scraped passwords. 278d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * @param {string} password The confirmed password that needs verification. 279d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) */ 280d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) verifyConfirmedPassword: function(password) { 281d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) var msg = { 282d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) method: 'verifyConfirmedPassword', 283d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) password: password 284d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }; 285d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) this.frame_.contentWindow.postMessage(msg, AUTH_URL_BASE); 286d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }, 287d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 288d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) /** 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Sends the authenticated user's e-mail address to the auth extension. 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {number} attemptToken The opaque token provided to the 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * retrieveAuthenticatedUserEmailCallback_. 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {string} email The authenticated user's e-mail address. 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) setAuthenticatedUserEmail: function(attemptToken, email) { 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var msg = { 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) method: 'setAuthenticatedUserEmail', 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) attemptToken: attemptToken, 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) email: email 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.frame_.contentWindow.postMessage(msg, AUTH_URL_BASE); 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Invoked to process authentication success. 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Object} credentials Credential object to pass to success 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * callback. 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @private 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onAuthSuccess_: function(credentials) { 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (this.successCallback_) 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.successCallback_(credentials); 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cr.dispatchSimpleEvent(this, 'completed'); 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Checks if message comes from the loaded authentication extension. 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {Object} e Payload of the received HTML5 message. 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @type {boolean} 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) isAuthExtMessage_: function(e) { 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return this.frame_.src && 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.frame_.src.indexOf(e.origin) == 0 && 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) e.source == this.frame_.contentWindow; 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Event handler that is invoked when HTML5 message is received. 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {object} e Payload of the received HTML5 message. 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onMessage_: function(e) { 3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) var msg = e.data; 3324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!this.isAuthExtMessage_(e)) 3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return; 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (msg.method == 'loginUILoaded') { 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cr.dispatchSimpleEvent(this, 'ready'); 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 341d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (/^complete(Login|Authentication)$|^offlineLogin$/.test(msg.method)) { 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!msg.email && !this.email_ && !msg.skipForNow) { 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var msg = {method: 'redirectToSignin'}; 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.frame_.contentWindow.postMessage(msg, AUTH_URL_BASE); 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.onAuthSuccess_({email: msg.email, 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) password: msg.password, 3498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) useOffline: msg.method == 'offlineLogin', 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) usingSAML: msg.usingSAML || false, 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chooseWhatToSync: msg.chooseWhatToSync, 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) skipForNow: msg.skipForNow || false, 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sessionIndex: msg.sessionIndex || ''}); 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (msg.method == 'retrieveAuthenticatedUserEmail') { 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (this.retrieveAuthenticatedUserEmailCallback_) { 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.retrieveAuthenticatedUserEmailCallback_(msg.attemptToken, 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) msg.apiUsed); 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) console.error( 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'GaiaAuthHost: Invalid retrieveAuthenticatedUserEmailCallback_.'); 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 365d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return; 366d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 367d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 368d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (msg.method == 'confirmPassword') { 369d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (this.confirmPasswordCallback_) 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.confirmPasswordCallback_(msg.passwordCount); 371d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) else 372d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) console.error('GaiaAuthHost: Invalid confirmPasswordCallback_.'); 373d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return; 374d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 375d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 376d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (msg.method == 'noPassword') { 377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (this.noPasswordCallback_) 378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) this.noPasswordCallback_(msg.email); 379d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) else 380d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) console.error('GaiaAuthHost: Invalid noPasswordCallback_.'); 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 382d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 383d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (msg.method == 'authPageLoaded') { 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.authDomain = msg.domain; 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.authFlow = msg.isSAML ? AuthFlow.SAML : AuthFlow.GAIA; 3871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 3881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 3891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 390c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (msg.method == 'insecureContentBlocked') { 391c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (this.insecureContentBlockedCallback_) { 392010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this.insecureContentBlockedCallback_(msg.url); 393c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 394c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch console.error( 395c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 'GaiaAuthHost: Invalid insecureContentBlockedCallback_.'); 396c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 397c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return; 398c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 399c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 400a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (msg.method == 'switchToFullTab') { 401a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) chrome.send('switchToFullTab', [msg.url]); 402a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return; 403a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 404a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 405d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) console.error('Unknown message method=' + msg.method); 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 4105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * The current auth flow of the hosted gaia_auth extension. 4115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @type {AuthFlow} 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cr.defineProperty(GaiaAuthHost, 'authFlow'); 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GaiaAuthHost.SUPPORTED_PARAMS = SUPPORTED_PARAMS; 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GaiaAuthHost.LOCALIZED_STRING_PARAMS = LOCALIZED_STRING_PARAMS; 4174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GaiaAuthHost.AuthMode = AuthMode; 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GaiaAuthHost.AuthFlow = AuthFlow; 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return { 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GaiaAuthHost: GaiaAuthHost 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}); 424