cros: Remove default pinned apps trial.
[chromium-blink-merge.git] / chrome / browser / resources / chromeos / login / oobe_screen_oauth_enrollment.js
blob205b83526e51f0bf17ebbfe5e59266f8f104e330
1 // Copyright (c) 2012 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_ERROR = 'error';
9   /** @const */ var STEP_EXPLAIN = 'explain';
10   /** @const */ var STEP_SUCCESS = 'success';
12   return {
13     EXTERNAL_API: [
14       'setIsAutoEnrollment',
15       'showStep',
16       'showError',
17       'showWorking',
18     ],
20     /**
21      * URL to load in the sign in frame.
22      */
23     signInUrl_: null,
25     /**
26      * Whether this is a manual or auto enrollment.
27      */
28     isAutoEnrollment_: false,
30     /**
31      * True if enrollment cancellation should be prevented.
32      */
33     preventCancellation_: false,
35     /**
36      * Enrollment steps with names and buttons to show.
37      */
38     steps_: null,
40     /**
41      * Dialog to confirm that auto-enrollment should really be cancelled.
42      * This is only created the first time it's used.
43      */
44     confirmDialog_: null,
46     /**
47      * The current step. This is the last value passed to showStep().
48      */
49     currentStep_: null,
51     /** @override */
52     decorate: function() {
53       window.addEventListener('message',
54                               this.onMessage_.bind(this), false);
55       $('oauth-enroll-error-retry').addEventListener('click',
56                                                      this.doRetry_.bind(this));
57       var links = document.querySelectorAll('.oauth-enroll-explain-link');
58       for (var i = 0; i < links.length; i++) {
59         links[i].addEventListener('click',
60                                   this.showStep.bind(this, STEP_EXPLAIN));
61       }
62     },
64     /**
65      * Header text of the screen.
66      * @type {string}
67      */
68     get header() {
69       return loadTimeData.getString('oauthEnrollScreenTitle');
70     },
72     /**
73      * Buttons in oobe wizard's button strip.
74      * @type {array} Array of Buttons.
75      */
76     get buttons() {
77       var buttons = [];
79       var cancelButton = this.ownerDocument.createElement('button');
80       cancelButton.id = 'oauth-enroll-cancel-button';
81       cancelButton.textContent = loadTimeData.getString('oauthEnrollCancel');
83       cancelButton.addEventListener('click', function(e) {
84         chrome.send('oauthEnrollClose', ['cancel']);
85       }.bind(this));
86       buttons.push(cancelButton);
88       var tryAgainButton = this.ownerDocument.createElement('button');
89       tryAgainButton.id = 'oauth-enroll-try-again-button';
90       tryAgainButton.hidden = true;
91       tryAgainButton.textContent =
92           loadTimeData.getString('oauthEnrollRetry');
93       tryAgainButton.addEventListener('click', this.doRetry_.bind(this));
94       buttons.push(tryAgainButton);
96       var explainButton = this.ownerDocument.createElement('button');
97       explainButton.id = 'oauth-enroll-explain-button';
98       explainButton.hidden = true;
99       explainButton.textContent =
100           loadTimeData.getString('oauthEnrollExplainButton');
101       explainButton.addEventListener('click', this.doRetry_.bind(this));
102       buttons.push(explainButton);
104       var doneButton = this.ownerDocument.createElement('button');
105       doneButton.id = 'oauth-enroll-done-button';
106       doneButton.hidden = true;
107       doneButton.textContent =
108           loadTimeData.getString('oauthEnrollDone');
109       doneButton.addEventListener('click', function(e) {
110         chrome.send('oauthEnrollClose', ['done']);
111       });
112       buttons.push(doneButton);
114       return buttons;
115     },
117     /**
118      * Sets the |isAutoEnrollment| flag of the OAuthEnrollmentScreen class and
119      * updates the UI.
120      * @param {boolean} is_auto_enrollment the new value of the flag.
121      */
122     setIsAutoEnrollment: function(is_auto_enrollment) {
123       this.isAutoEnrollment_ = is_auto_enrollment;
124       // The cancel button is not available during auto-enrollment.
125       var cancel = this.isAutoEnrollment_ ? null : 'cancel';
126       // During auto-enrollment the user must try again from the error screen.
127       var errorCancel = this.isAutoEnrollment_ ? 'try-again' : 'cancel';
128       this.steps_ = [
129         {
130           name: STEP_SIGNIN,
131           button: cancel
132         },
133         {
134           name: STEP_WORKING,
135           button: cancel
136         },
137         {
138           name: STEP_ERROR,
139           button: errorCancel,
140           focusButton: this.isAutoEnrollment_
141         },
142         {
143           name: STEP_EXPLAIN,
144           button: 'explain',
145           focusButton: true
146         },
147         {
148           name: STEP_SUCCESS,
149           button: 'done',
150           focusButton: true
151         },
152       ];
154       var links = document.querySelectorAll('.oauth-enroll-explain-link');
155       for (var i = 0; i < links.length; i++) {
156         links[i].hidden = !this.isAutoEnrollment_;
157       }
158     },
160     /**
161      * Event handler that is invoked just before the frame is shown.
162      * @param {Object} data Screen init payload, contains the signin frame
163      * URL.
164      */
165     onBeforeShow: function(data) {
166       var url = data.signin_url;
167       url += '?gaiaUrl=' + encodeURIComponent(data.gaiaUrl);
168       this.signInUrl_ = url;
169       this.setIsAutoEnrollment(data.is_auto_enrollment);
170       this.preventCancellation_ = data.prevent_cancellation;
171       $('oauth-enroll-signin-frame').contentWindow.location.href =
172           this.signInUrl_;
173       if (this.preventCancellation_) {
174         $('oauth-enroll-cancel-button').textContent =
175             loadTimeData.getString('oauthEnrollCancelAutoEnrollmentGoBack');
176       }
178       this.showStep(STEP_SIGNIN);
179     },
181     /**
182      * Cancels enrollment and drops the user back to the login screen.
183      */
184     cancel: function() {
185       if (this.isAutoEnrollment_)
186         return;
188       chrome.send('oauthEnrollClose', ['cancel']);
189     },
191     /**
192      * Switches between the different steps in the enrollment flow.
193      * @param {string} step the steps to show, one of "signin", "working",
194      * "error", "success".
195      */
196     showStep: function(step) {
197       this.currentStep_ = step;
198       $('oauth-enroll-cancel-button').hidden = true;
199       $('oauth-enroll-try-again-button').hidden = true;
200       $('oauth-enroll-explain-button').hidden = true;
201       $('oauth-enroll-done-button').hidden = true;
202       for (var i = 0; i < this.steps_.length; i++) {
203         var theStep = this.steps_[i];
204         var active = (theStep.name == step);
205         $('oauth-enroll-step-' + theStep.name).hidden = !active;
206         if (active && theStep.button) {
207           var button = $('oauth-enroll-' + theStep.button + '-button');
208           button.hidden = false;
209           if (theStep.focusButton)
210             button.focus();
211         }
212       }
213     },
215     /**
216      * Sets an error message and switches to the error screen.
217      * @param {string} message the error message.
218      * @param {boolean} retry whether the retry link should be shown.
219      */
220     showError: function(message, retry) {
221       $('oauth-enroll-error-message').textContent = message;
222       $('oauth-enroll-error-retry').hidden = !retry || this.isAutoEnrollment_;
223       this.showStep(STEP_ERROR);
224     },
226     /**
227      * Sets a progressing message and switches to the working screen.
228      * @param {string} message the progress message.
229      */
230     showWorking: function(message) {
231       $('oauth-enroll-working-message').textContent = message;
232       this.showStep(STEP_WORKING);
233     },
235     /**
236      * Handler for cancellations of an enforced auto-enrollment.
237      */
238     cancelAutoEnrollment: function() {
239       // Check if this is forced enrollment flow for a kiosk app.
240       if (this.preventCancellation_)
241         return;
243       // The dialog to confirm cancellation of auto-enrollment is only shown
244       // if this is an auto-enrollment, and if the user is currently in the
245       // 'explain' step.
246       if (!this.isAutoEnrollment_ || this.currentStep_ !== STEP_EXPLAIN)
247         return;
248       if (!this.confirmDialog_) {
249         this.confirmDialog_ = new cr.ui.dialogs.ConfirmDialog(document.body);
250         this.confirmDialog_.setOkLabel(
251             loadTimeData.getString('oauthEnrollCancelAutoEnrollmentConfirm'));
252         this.confirmDialog_.setCancelLabel(
253             loadTimeData.getString('oauthEnrollCancelAutoEnrollmentGoBack'));
254         this.confirmDialog_.setInitialFocusOnCancel();
255       }
256       this.confirmDialog_.show(
257           loadTimeData.getString('oauthEnrollCancelAutoEnrollmentReally'),
258           this.onConfirmCancelAutoEnrollment_.bind(this));
259     },
261     /**
262      * Retries the enrollment process after an error occurred in a previous
263      * attempt. This goes to the C++ side through |chrome| first to clean up the
264      * profile, so that the next attempt is performed with a clean state.
265      */
266     doRetry_: function() {
267       chrome.send('oauthEnrollRetry');
268     },
270     /**
271      * Handler for confirmation of cancellation of auto-enrollment.
272      */
273     onConfirmCancelAutoEnrollment_: function() {
274       chrome.send('oauthEnrollClose', ['autocancel']);
275     },
277     /**
278      * Checks if a given HTML5 message comes from the URL loaded into the signin
279      * frame.
280      * @param {Object} m HTML5 message.
281      * @type {boolean} whether the message comes from the signin frame.
282      */
283     isSigninMessage_: function(m) {
284       return this.signInUrl_ != null &&
285           this.signInUrl_.indexOf(m.origin) == 0 &&
286           m.source == $('oauth-enroll-signin-frame').contentWindow;
287     },
289     /**
290      * Event handler for HTML5 messages.
291      * @param {Object} m HTML5 message.
292      */
293     onMessage_: function(m) {
294       if (!this.isSigninMessage_(m))
295         return;
297       var msg = m.data;
299       // 'completeLogin' for full gaia signin flow. For SAML case,
300       // 'confirmPassword' is sent after authentication. Since enrollment
301       // does not need the actual password, this is treated the same as
302       // 'completeLogin'.
303       if (msg.method == 'completeLogin' || msg.method == 'confirmPassword')
304         chrome.send('oauthEnrollCompleteLogin', [msg.email]);
305     }
306   };