Elim cr-checkbox
[chromium-blink-merge.git] / chrome / browser / resources / chromeos / login / oobe_screen_oauth_enrollment.js
blob902e02626ec97b97c2d40f380c9b1903bcdeec67
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 login.createScreen('OAuthEnrollmentScreen', 'oauth-enrollment', function() {
6 /** @const */ var STEP_SIGNIN = 'signin';
7 /** @const */ var STEP_WORKING = 'working';
8 /** @const */ var STEP_ATTRIBUTE_PROMPT = 'attribute-prompt';
9 /** @const */ var STEP_ERROR = 'error';
10 /** @const */ var STEP_SUCCESS = 'success';
12 /* TODO(dzhioev): define this step on C++ side.
13 /** @const */ var STEP_ATTRIBUTE_PROMPT_ERROR = 'attribute-prompt-error';
15 /** @const */ var HELP_TOPIC_ENROLLMENT = 4631259;
17 return {
18 EXTERNAL_API: [
19 'showStep',
20 'showError',
21 'doReload',
22 'showAttributePromptStep',
25 /**
26 * Authenticator object that wraps GAIA webview.
28 authenticator_: null,
30 /**
31 * The current step. This is the last value passed to showStep().
33 currentStep_: null,
35 /**
36 * We block esc, back button and cancel button until gaia is loaded to
37 * prevent multiple cancel events.
39 isCancelDisabled_: null,
41 get isCancelDisabled() { return this.isCancelDisabled_ },
42 set isCancelDisabled(disabled) {
43 if (disabled == this.isCancelDisabled)
44 return;
45 this.isCancelDisabled_ = disabled;
48 /** @override */
49 decorate: function() {
50 var webview = document.createElement('webview');
51 webview.id = webview.name = 'oauth-enroll-auth-view';
52 $('oauth-enroll-auth-view-container').appendChild(webview);
53 this.authenticator_ = new cr.login.Authenticator(webview);
55 this.authenticator_.addEventListener('ready',
56 (function() {
57 if (this.currentStep_ != STEP_SIGNIN)
58 return;
59 this.isCancelDisabled = false;
60 chrome.send('frameLoadingCompleted', [0]);
61 }).bind(this));
63 this.authenticator_.addEventListener('authCompleted',
64 (function(e) {
65 var detail = e.detail;
66 if (!detail.email || !detail.authCode) {
67 this.showError(
68 loadTimeData.getString('fatalEnrollmentError'),
69 false);
70 return;
72 chrome.send('oauthEnrollCompleteLogin', [detail.email,
73 detail.authCode]);
74 }).bind(this));
76 this.authenticator_.addEventListener('authFlowChange',
77 (function(e) {
78 var isSAML = this.authenticator_.authFlow ==
79 cr.login.Authenticator.AuthFlow.SAML;
80 if (isSAML) {
81 $('oauth-saml-notice-message').textContent =
82 loadTimeData.getStringF('samlNotice',
83 this.authenticator_.authDomain);
85 this.classList.toggle('saml', isSAML);
86 if (Oobe.getInstance().currentScreen == this)
87 Oobe.getInstance().updateScreenSize(this);
88 }).bind(this));
90 this.authenticator_.addEventListener('backButton',
91 (function(e) {
92 $('oauth-enroll-back-button').hidden = !e.detail;
93 $('oauth-enroll-auth-view').focus();
94 }).bind(this));
96 this.authenticator_.insecureContentBlockedCallback =
97 (function(url) {
98 this.showError(
99 loadTimeData.getStringF('insecureURLEnrollmentError', url),
100 false);
101 }).bind(this);
103 this.authenticator_.missingGaiaInfoCallback =
104 (function() {
105 this.showError(
106 loadTimeData.getString('fatalEnrollmentError'),
107 false);
108 }).bind(this);
110 $('oauth-enroll-error-card').addEventListener('buttonclick',
111 this.doRetry_.bind(this));
112 function doneCallback() {
113 chrome.send('oauthEnrollClose', ['done']);
116 $('oauth-enroll-attribute-prompt-error-card').addEventListener(
117 'buttonclick', doneCallback);
118 $('oauth-enroll-success-card').addEventListener(
119 'buttonclick', doneCallback);
121 $('oauth-enroll-cancel-button').addEventListener('click',
122 this.cancel.bind(this));
123 $('oauth-enroll-refresh-button').addEventListener('click',
124 this.cancel.bind(this));
126 $('oauth-enroll-back-button').addEventListener('click',
127 (function(e) {
128 $('oauth-enroll-back-button').hidden = true;
129 $('oauth-enroll-auth-view').back();
130 e.preventDefault();
131 }).bind(this));
133 $('oauth-enroll-attribute-prompt-card').addEventListener('submit',
134 this.onAttributesSubmitted.bind(this));
136 $('oauth-enroll-learn-more-link').addEventListener('click',
137 function(event) {
138 chrome.send('oauthEnrollOnLearnMore');
141 $('oauth-enroll-skip-button').addEventListener('click',
142 this.onSkipButtonClicked.bind(this));
146 * Header text of the screen.
147 * @type {string}
149 get header() {
150 return loadTimeData.getString('oauthEnrollScreenTitle');
154 * Buttons in oobe wizard's button strip.
155 * @type {array} Array of Buttons.
157 get buttons() {
158 var buttons = [];
159 var ownerDocument = this.ownerDocument;
161 function makeButton(id, classes, label, handler) {
162 var button = ownerDocument.createElement('button');
163 button.id = id;
164 button.classList.add('oauth-enroll-button');
165 button.classList.add.apply(button.classList, classes);
166 button.textContent = label;
167 button.addEventListener('click', handler);
168 buttons.push(button);
171 return buttons;
175 * Event handler that is invoked just before the frame is shown.
176 * @param {Object} data Screen init payload, contains the signin frame
177 * URL.
179 onBeforeShow: function(data) {
180 $('login-header-bar').signinUIState = SIGNIN_UI_STATE.ENROLLMENT;
181 $('inner-container').classList.add('new-gaia-flow');
182 var gaiaParams = {};
183 gaiaParams.gaiaUrl = data.gaiaUrl;
184 gaiaParams.clientId = data.clientId;
185 gaiaParams.gaiaPath = 'embedded/setup/chromeos';
186 gaiaParams.isNewGaiaFlowChromeOS = true;
187 gaiaParams.needPassword = false;
188 if (data.management_domain) {
189 gaiaParams.enterpriseDomain = data.management_domain;
190 gaiaParams.emailDomain = data.management_domain;
192 gaiaParams.flow = data.flow;
193 this.authenticator_.load(cr.login.Authenticator.AuthMode.DEFAULT,
194 gaiaParams);
196 var modes = ['manual', 'forced', 'recovery'];
197 for (var i = 0; i < modes.length; ++i) {
198 this.classList.toggle('mode-' + modes[i],
199 data.enrollment_mode == modes[i]);
201 this.isCancelDisabled = true;
202 this.showStep(STEP_SIGNIN);
205 onBeforeHide: function() {
206 $('login-header-bar').signinUIState = SIGNIN_UI_STATE.HIDDEN;
210 * Shows attribute-prompt step with pre-filled asset ID and
211 * location.
213 showAttributePromptStep: function(annotated_asset_id, annotated_location) {
214 $('oauth-enroll-asset-id').value = annotated_asset_id;
215 $('oauth-enroll-location').value = annotated_location;
216 $('oauth-enroll-back-button').hidden = true;
218 this.showStep(STEP_ATTRIBUTE_PROMPT);
222 * Cancels enrollment and drops the user back to the login screen.
224 cancel: function() {
225 if (this.isCancelDisabled)
226 return;
227 this.isCancelDisabled = true;
228 chrome.send('oauthEnrollClose', ['cancel']);
232 * Switches between the different steps in the enrollment flow.
233 * @param {string} step the steps to show, one of "signin", "working",
234 * "attribute-prompt", "error", "success".
236 showStep: function(step) {
237 this.classList.toggle('oauth-enroll-state-' + this.currentStep_, false);
238 this.classList.toggle('oauth-enroll-state-' + step, true);
240 if (step == STEP_SIGNIN) {
241 $('oauth-enroll-auth-view').focus();
242 } else if (step == STEP_ERROR) {
243 $('oauth-enroll-error-card').submitButton.focus();
244 } else if (step == STEP_SUCCESS) {
245 $('oauth-enroll-success-card').submitButton.focus();
246 } else if (step == STEP_ATTRIBUTE_PROMPT) {
247 $('oauth-enroll-asset-id').focus();
248 } else if (step == STEP_ATTRIBUTE_PROMPT_ERROR) {
249 $('oauth-enroll-attribute-prompt-error-card').submitButton.focus();
251 this.currentStep_ = step;
255 * Sets an error message and switches to the error screen.
256 * @param {string} message the error message.
257 * @param {boolean} retry whether the retry link should be shown.
259 showError: function(message, retry) {
260 if (this.currentStep_ == STEP_ATTRIBUTE_PROMPT) {
261 $('oauth-enroll-attribute-prompt-error-card').textContent = message;
262 this.showStep(STEP_ATTRIBUTE_PROMPT_ERROR);
263 return;
265 $('oauth-enroll-error-card').textContent = message;
266 $('oauth-enroll-error-card').buttonLabel =
267 retry ? loadTimeData.getString('oauthEnrollRetry') : '';
268 this.showStep(STEP_ERROR);
271 doReload: function() {
272 this.authenticator_.reload();
276 * Retries the enrollment process after an error occurred in a previous
277 * attempt. This goes to the C++ side through |chrome| first to clean up the
278 * profile, so that the next attempt is performed with a clean state.
280 doRetry_: function() {
281 chrome.send('oauthEnrollRetry');
285 * Skips the device attribute update,
286 * shows the successful enrollment step.
288 onSkipButtonClicked: function() {
289 this.showStep(STEP_SUCCESS);
293 * Uploads the device attributes to server. This goes to C++ side through
294 * |chrome| and launches the device attribute update negotiation.
296 onAttributesSubmitted: function() {
297 chrome.send('oauthEnrollAttributes',
298 [$('oauth-enroll-asset-id').value,
299 $('oauth-enroll-location').value]);