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