OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @fileoverview Login UI based on a stripped down OOBE controller. | 6 * @fileoverview Login UI based on a stripped down OOBE controller. |
7 * TODO(xiyuan): Refactoring this to get a better structure. | |
8 */ | 7 */ |
9 | 8 |
10 <include src="../user_images_grid.js"></include> | 9 <include src="login_common.js"></include> |
11 <include src="apps_menu.js"></include> | |
12 <include src="bubble.js"></include> | |
13 <include src="display_manager.js"></include> | |
14 <include src="header_bar.js"></include> | |
15 <include src="network_dropdown.js"></include> | |
16 <include src="oobe_screen_oauth_enrollment.js"></include> | |
17 <include src="oobe_screen_user_image.js"></include> | |
18 <include src="oobe_screen_reset.js"></include> | |
19 <include src="screen_wrong_hwid.js"></include> | |
20 <include src="screen_account_picker.js"></include> | |
21 <include src="screen_gaia_signin.js"></include> | |
22 <include src="screen_error_message.js"></include> | |
23 <include src="screen_tpm_error.js"></include> | |
24 <include src="screen_password_changed.js"></include> | |
25 <include src="screen_locally_managed_user_creation.js"></include> | |
26 <include src="oobe_screen_terms_of_service.js"></include> | |
27 <include src="user_pod_row.js"></include> | |
28 | 10 |
29 cr.define('cr.ui', function() { | 11 cr.define('cr.ui.Oobe', function() { |
30 var DisplayManager = cr.ui.login.DisplayManager; | 12 return { |
| 13 /** |
| 14 * Initializes the OOBE flow. This will cause all C++ handlers to |
| 15 * be invoked to do final setup. |
| 16 */ |
| 17 initialize: function() { |
| 18 cr.ui.login.DisplayManager.initialize(); |
| 19 oobe.WrongHWIDScreen.register(); |
| 20 login.AccountPickerScreen.register(); |
| 21 login.GaiaSigninScreen.register(); |
| 22 oobe.OAuthEnrollmentScreen.register(); |
| 23 oobe.UserImageScreen.register(/* lazyInit= */ true); |
| 24 oobe.ResetScreen.register(); |
| 25 login.ErrorMessageScreen.register(); |
| 26 login.TPMErrorMessageScreen.register(); |
| 27 login.PasswordChangedScreen.register(); |
| 28 login.LocallyManagedUserCreationScreen.register(); |
| 29 oobe.TermsOfServiceScreen.register(); |
31 | 30 |
32 /** | 31 cr.ui.Bubble.decorate($('bubble')); |
33 * Constructs an Out of box controller. It manages initialization of screens, | 32 login.HeaderBar.decorate($('login-header-bar')); |
34 * transitions, error messages display. | |
35 * @extends {DisplayManager} | |
36 * @constructor | |
37 */ | |
38 function Oobe() { | |
39 } | |
40 | 33 |
41 cr.addSingletonGetter(Oobe); | 34 chrome.send('screenStateInitialize'); |
| 35 }, |
42 | 36 |
43 Oobe.prototype = { | 37 // Dummy Oobe functions not present with stripped login UI. |
44 __proto__: DisplayManager.prototype, | 38 initializeA11yMenu: function(e) {}, |
45 }; | 39 handleAccessbilityLinkClick: function(e) {}, |
46 | 40 handleSpokenFeedbackClick: function(e) {}, |
47 /** | 41 handleHighContrastClick: function(e) {}, |
48 * Initializes the OOBE flow. This will cause all C++ handlers to | 42 handleScreenMagnifierClick: function(e) {}, |
49 * be invoked to do final setup. | 43 enableContinueButton: function(enable) {}, |
50 */ | 44 setUsageStats: function(checked) {}, |
51 Oobe.initialize = function() { | 45 setOemEulaUrl: function(oemEulaUrl) {}, |
52 DisplayManager.initialize(); | 46 setUpdateProgress: function(progress) {}, |
53 oobe.WrongHWIDScreen.register(); | 47 showUpdateEstimatedTimeLeft: function(enable) {}, |
54 login.AccountPickerScreen.register(); | 48 setUpdateEstimatedTimeLeft: function(seconds) {}, |
55 login.GaiaSigninScreen.register(); | 49 setUpdateMessage: function(message) {}, |
56 oobe.OAuthEnrollmentScreen.register(); | 50 showUpdateCurtain: function(enable) {}, |
57 oobe.UserImageScreen.register(/* lazyInit= */ true); | 51 setTpmPassword: function(password) {}, |
58 oobe.ResetScreen.register(); | 52 refreshA11yInfo: function(data) {}, |
59 login.ErrorMessageScreen.register(); | 53 reloadContent: function(data) {}, |
60 login.TPMErrorMessageScreen.register(); | |
61 login.PasswordChangedScreen.register(); | |
62 login.LocallyManagedUserCreationScreen.register(); | |
63 oobe.TermsOfServiceScreen.register(); | |
64 | |
65 cr.ui.Bubble.decorate($('bubble')); | |
66 login.HeaderBar.decorate($('login-header-bar')); | |
67 | |
68 chrome.send('screenStateInitialize'); | |
69 }; | |
70 | |
71 /** | |
72 * Handle accelerators. These are passed from native code instead of a JS | |
73 * event handler in order to make sure that embedded iframes cannot swallow | |
74 * them. | |
75 * @param {string} name Accelerator name. | |
76 */ | |
77 Oobe.handleAccelerator = function(name) { | |
78 Oobe.getInstance().handleAccelerator(name); | |
79 }; | |
80 | |
81 /** | |
82 * Shows the given screen. | |
83 * @param {Object} screen Screen params dict, e.g. {id: screenId, data: data} | |
84 */ | |
85 Oobe.showScreen = function(screen) { | |
86 Oobe.getInstance().showScreen(screen); | |
87 }; | |
88 | |
89 /** | |
90 * Shows the previous screen of workflow. | |
91 */ | |
92 Oobe.goBack = function() { | |
93 Oobe.getInstance().goBack(); | |
94 }; | |
95 | |
96 /** | |
97 * Dummy Oobe functions not present with stripped login UI. | |
98 */ | |
99 Oobe.initializeA11yMenu = function(e) {}; | |
100 Oobe.handleAccessbilityLinkClick = function(e) {}; | |
101 Oobe.handleSpokenFeedbackClick = function(e) {}; | |
102 Oobe.handleHighContrastClick = function(e) {}; | |
103 Oobe.handleScreenMagnifierClick = function(e) {}; | |
104 Oobe.enableContinueButton = function(enable) {}; | |
105 Oobe.setUsageStats = function(checked) {}; | |
106 Oobe.setOemEulaUrl = function(oemEulaUrl) {}; | |
107 Oobe.setUpdateProgress = function(progress) {}; | |
108 Oobe.showUpdateEstimatedTimeLeft = function(enable) {}; | |
109 Oobe.setUpdateEstimatedTimeLeft = function(seconds) {}; | |
110 Oobe.setUpdateMessage = function(message) {}; | |
111 Oobe.showUpdateCurtain = function(enable) {}; | |
112 Oobe.setTpmPassword = function(password) {}; | |
113 Oobe.refreshA11yInfo = function(data) {}; | |
114 Oobe.reloadContent = function(data) {}; | |
115 | |
116 /** | |
117 * Updates version label visibilty. | |
118 * @param {boolean} show True if version label should be visible. | |
119 */ | |
120 Oobe.showVersion = function(show) { | |
121 Oobe.getInstance().showVersion(show); | |
122 }; | |
123 | |
124 /** | |
125 * Update body class to switch between OOBE UI and Login UI. | |
126 */ | |
127 Oobe.showOobeUI = function(showOobe) { | |
128 if (showOobe) { | |
129 document.body.classList.remove('login-display'); | |
130 } else { | |
131 document.body.classList.add('login-display'); | |
132 Oobe.getInstance().prepareForLoginDisplay_(); | |
133 } | |
134 | |
135 // Don't show header bar for OOBE. | |
136 Oobe.getInstance().headerHidden = showOobe; | |
137 }; | |
138 | |
139 /** | |
140 * Disables signin UI. | |
141 */ | |
142 Oobe.disableSigninUI = function() { | |
143 DisplayManager.disableSigninUI(); | |
144 }; | |
145 | |
146 /** | |
147 * Shows signin UI. | |
148 * @param {string} opt_email An optional email for signin UI. | |
149 */ | |
150 Oobe.showSigninUI = function(opt_email) { | |
151 DisplayManager.showSigninUI(opt_email); | |
152 }; | |
153 | |
154 /** | |
155 * Resets sign-in input fields. | |
156 * @param {boolean} forceOnline Whether online sign-in should be forced. | |
157 * If |forceOnline| is false previously used sign-in type will be used. | |
158 */ | |
159 Oobe.resetSigninUI = function(forceOnline) { | |
160 DisplayManager.resetSigninUI(forceOnline); | |
161 }; | |
162 | |
163 /** | |
164 * Shows sign-in error bubble. | |
165 * @param {number} loginAttempts Number of login attemps tried. | |
166 * @param {string} message Error message to show. | |
167 * @param {string} link Text to use for help link. | |
168 * @param {number} helpId Help topic Id associated with help link. | |
169 */ | |
170 Oobe.showSignInError = function(loginAttempts, message, link, helpId) { | |
171 DisplayManager.showSignInError(loginAttempts, message, link, helpId); | |
172 }; | |
173 | |
174 /** | |
175 * Shows password changed screen that offers migration. | |
176 * @param {boolean} showError Whether to show the incorrect password error. | |
177 */ | |
178 Oobe.showPasswordChangedScreen = function(showError) { | |
179 DisplayManager.showPasswordChangedScreen(showError); | |
180 }; | |
181 | |
182 /** | |
183 * Shows dialog to create managed user. | |
184 */ | |
185 Oobe.showManagedUserCreationScreen = function() { | |
186 DisplayManager.showManagedUserCreationScreen(); | |
187 }; | |
188 | |
189 /** | |
190 * Shows TPM error screen. | |
191 */ | |
192 Oobe.showTpmError = function() { | |
193 DisplayManager.showTpmError(); | |
194 }; | |
195 | |
196 /** | |
197 * Clears error bubble. | |
198 */ | |
199 Oobe.clearErrors = function() { | |
200 DisplayManager.clearErrors(); | |
201 }; | |
202 | |
203 /** | |
204 * Displays animations on successful authentication, that have to happen | |
205 * before login UI is dismissed. | |
206 */ | |
207 Oobe.animateAuthenticationSuccess = function() { | |
208 $('login-header-bar').animateOut(function() { | |
209 chrome.send('unlockOnLoginSuccess'); | |
210 }); | |
211 }; | |
212 | |
213 /** | |
214 * Displays animations that have to happen once login UI is fully displayed. | |
215 */ | |
216 Oobe.animateOnceFullyDisplayed = function() { | |
217 $('login-header-bar').animateIn(); | |
218 }; | |
219 | |
220 /** | |
221 * Handles login success notification. | |
222 */ | |
223 Oobe.onLoginSuccess = function(username) { | |
224 if (Oobe.getInstance().currentScreen.id == SCREEN_ACCOUNT_PICKER) { | |
225 // TODO(nkostylev): Enable animation back when session start jank | |
226 // is reduced. See http://crosbug.com/11116 http://crosbug.com/18307 | |
227 // $('pod-row').startAuthenticatedAnimation(); | |
228 } | |
229 }; | |
230 | |
231 /** | |
232 * Sets text content for a div with |labelId|. | |
233 * @param {string} labelId Id of the label div. | |
234 * @param {string} labelText Text for the label. | |
235 */ | |
236 Oobe.setLabelText = function(labelId, labelText) { | |
237 DisplayManager.setLabelText(labelId, labelText); | |
238 }; | |
239 | |
240 /** | |
241 * Sets the text content of the enterprise info message. | |
242 * If the text is empty, the entire notification will be hidden. | |
243 * @param {string} messageText The message text. | |
244 */ | |
245 Oobe.setEnterpriseInfo = function(messageText) { | |
246 DisplayManager.setEnterpriseInfo(messageText); | |
247 }; | |
248 | |
249 /** | |
250 * Enforces focus on user pod of locked user. | |
251 */ | |
252 Oobe.forceLockedUserPodFocus = function() { | |
253 login.AccountPickerScreen.forceLockedUserPodFocus(); | |
254 }; | |
255 | |
256 /** | |
257 * Sets the domain name whose Terms of Service are being shown on the Terms of | |
258 * Service screen. | |
259 * @param {string} domain The domain name. | |
260 */ | |
261 Oobe.setTermsOfServiceDomain = function(domain) { | |
262 oobe.TermsOfServiceScreen.setDomain(domain); | |
263 }; | |
264 | |
265 /** | |
266 * Displays an error message on the Terms of Service screen. Called when the | |
267 * download of the Terms of Service has failed. | |
268 */ | |
269 Oobe.setTermsOfServiceLoadError = function() { | |
270 $('terms-of-service').classList.remove('tos-loading'); | |
271 $('terms-of-service').classList.add('error'); | |
272 }; | |
273 | |
274 /** | |
275 * Displays the given |termsOfService| on the Terms of Service screen. | |
276 * @param {string} termsOfService The terms of service, as plain text. | |
277 */ | |
278 Oobe.setTermsOfService = function(termsOfService) { | |
279 oobe.TermsOfServiceScreen.setTermsOfService(termsOfService); | |
280 }; | |
281 | |
282 /** | |
283 * Clears password field in user-pod. | |
284 */ | |
285 Oobe.clearUserPodPassword = function() { | |
286 DisplayManager.clearUserPodPassword(); | |
287 }; | |
288 | |
289 // Export | |
290 return { | |
291 Oobe: Oobe | |
292 }; | 54 }; |
293 }); | 55 }); |
294 | 56 |
295 var Oobe = cr.ui.Oobe; | |
296 | |
297 // Allow selection events on components with editable text (password field) | |
298 // bug (http://code.google.com/p/chromium/issues/detail?id=125863) | |
299 disableTextSelectAndDrag(function(e) { | |
300 var src = e.target; | |
301 return src instanceof HTMLTextAreaElement || | |
302 src instanceof HTMLInputElement && | |
303 /text|password|search/.test(src.type); | |
304 }); | |
305 | |
306 document.addEventListener('DOMContentLoaded', cr.ui.Oobe.initialize); | 57 document.addEventListener('DOMContentLoaded', cr.ui.Oobe.initialize); |
OLD | NEW |