Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3196)

Unified Diff: chrome/browser/resources/chromeos/login/md_login_shared.js

Issue 2855883005: cros: Selectively fork login assets. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/chromeos/login/md_login_shared.js
diff --git a/chrome/browser/resources/chromeos/login/md_login_shared.js b/chrome/browser/resources/chromeos/login/md_login_shared.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb5b319711b8d3e53b947478111be0e9641543d1
--- /dev/null
+++ b/chrome/browser/resources/chromeos/login/md_login_shared.js
@@ -0,0 +1,470 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Common OOBE controller methods. This method is shared between
+ * OOBE, login, and the lock screen. Add only methods that need to be shared
+ * between all *three* screens here, as each additional method increases the
+ * time it takes to show the lock screen.
+ *
+ * If a method needs to be shared between the oobe and login screens, add it to
+ * login_non_lock_shared.js.
+ */
+
+// <include src="test_util.js">
+// <include src="../../../../../ui/login/screen.js">
+// <include src="screen_context.js">
+// <include src="../user_images_grid.js">
+// <include src="apps_menu.js">
+// <include src="../../../../../ui/login/bubble.js">
+// <include src="../../../../../ui/login/display_manager.js">
+// <include src="header_bar.js">
+
+// <include src="../../../../../ui/login/account_picker/md_screen_account_picker.js">
+
+// <include src="../../../../../ui/login/login_ui_tools.js">
+// <include src="../../../../../ui/login/account_picker/md_user_pod_row.js">
+// <include src="../../../../../ui/login/resource_loader.js">
+
+cr.define('cr.ui', function() {
+ var DisplayManager = cr.ui.login.DisplayManager;
+
+ /**
+ * Constructs an Out of box controller. It manages initialization of screens,
+ * transitions, error messages display.
+ * @extends {DisplayManager}
+ * @constructor
+ */
+ function Oobe() {
+ }
+
+ /**
+ * Delay in milliseconds between start of OOBE animation and start of
+ * header bar animation.
+ */
+ var HEADER_BAR_DELAY_MS = 300;
+
+ cr.addSingletonGetter(Oobe);
+
+ Oobe.prototype = {
+ __proto__: DisplayManager.prototype,
+ };
+
+ /**
+ * Handle accelerators. These are passed from native code instead of a JS
+ * event handler in order to make sure that embedded iframes cannot swallow
+ * them.
+ * @param {string} name Accelerator name.
+ */
+ Oobe.handleAccelerator = function(name) {
+ Oobe.getInstance().handleAccelerator(name);
+ };
+
+ /**
+ * Shows the given screen.
+ * @param {Object} screen Screen params dict, e.g. {id: screenId, data: data}
+ */
+ Oobe.showScreen = function(screen) {
+ Oobe.getInstance().showScreen(screen);
+ };
+
+ /**
+ * Updates missin API keys message visibility.
+ * @param {boolean} show True if the message should be visible.
+ */
+ Oobe.showAPIKeysNotice = function(show) {
+ $('api-keys-notice-container').hidden = !show;
+ };
+
+ /**
+ * Updates version label visibility.
+ * @param {boolean} show True if version label should be visible.
+ */
+ Oobe.showVersion = function(show) {
+ Oobe.getInstance().showVersion(show);
+ };
+
+ /**
+ * Update body class to switch between OOBE UI and Login UI.
+ */
+ Oobe.showOobeUI = function(showOobe) {
+ if (showOobe) {
+ document.body.classList.add('oobe-display');
+
+ // Callback to animate the header bar in.
+ var showHeaderBar = function() {
+ login.HeaderBar.animateIn(false, function() {
+ chrome.send('headerBarVisible');
+ });
+ };
+ // Start asynchronously so the OOBE network screen comes in first.
+ window.setTimeout(showHeaderBar, HEADER_BAR_DELAY_MS);
+ } else {
+ document.body.classList.remove('oobe-display');
+ Oobe.getInstance().prepareForLoginDisplay_();
+ // Ensure header bar is visible when switching to Login UI from oobe.
+ if (Oobe.getInstance().displayType == DISPLAY_TYPE.OOBE)
+ login.HeaderBar.animateIn(true);
+ }
+
+ Oobe.getInstance().headerHidden = false;
+ };
+
+ /**
+ * When |showShutdown| is set to "true", the shutdown button is shown and the
+ * reboot button hidden. If set to "false", the reboot button is visible and
+ * the shutdown button hidden.
+ */
+ Oobe.showShutdown = function(showShutdown) {
+ $('login-header-bar').showShutdownButton = showShutdown;
+ $('login-header-bar').showRebootButton = !showShutdown;
+ };
+
+ /**
+ * Enables keyboard driven flow.
+ */
+ Oobe.enableKeyboardFlow = function(value) {
+ // Don't show header bar for OOBE.
+ Oobe.getInstance().forceKeyboardFlow = value;
+ };
+
+ /**
+ * Disables signin UI.
+ */
+ Oobe.disableSigninUI = function() {
+ DisplayManager.disableSigninUI();
+ };
+
+ /**
+ * Shows signin UI.
+ * @param {string} opt_email An optional email for signin UI.
+ */
+ Oobe.showSigninUI = function(opt_email) {
+ DisplayManager.showSigninUI(opt_email);
+ };
+
+ /**
+ * Resets sign-in input fields.
+ * @param {boolean} forceOnline Whether online sign-in should be forced.
+ * If |forceOnline| is false previously used sign-in type will be used.
+ */
+ Oobe.resetSigninUI = function(forceOnline) {
+ DisplayManager.resetSigninUI(forceOnline);
+ };
+
+ /**
+ * Shows sign-in error bubble.
+ * @param {number} loginAttempts Number of login attemps tried.
+ * @param {string} message Error message to show.
+ * @param {string} link Text to use for help link.
+ * @param {number} helpId Help topic Id associated with help link.
+ */
+ Oobe.showSignInError = function(loginAttempts, message, link, helpId) {
+ DisplayManager.showSignInError(loginAttempts, message, link, helpId);
+ };
+
+ /**
+ * Shows password changed screen that offers migration.
+ * @param {boolean} showError Whether to show the incorrect password error.
+ */
+ Oobe.showPasswordChangedScreen = function(showError, email) {
+ DisplayManager.showPasswordChangedScreen(showError, email);
+ };
+
+ /**
+ * Shows dialog to create a supervised user.
+ */
+ Oobe.showSupervisedUserCreationScreen = function() {
+ DisplayManager.showSupervisedUserCreationScreen();
+ };
+
+ /**
+ * Shows TPM error screen.
+ */
+ Oobe.showTpmError = function() {
+ DisplayManager.showTpmError();
+ };
+
+ /**
+ * Shows Active Directory password change screen.
+ * @param {string} username Name of the user that should change the password.
+ */
+ Oobe.showActiveDirectoryPasswordChangeScreen = function(username) {
+ DisplayManager.showActiveDirectoryPasswordChangeScreen(username);
+ };
+
+ /**
+ * Show user-pods.
+ */
+ Oobe.showUserPods = function() {
+ $('pod-row').loadLastWallpaper();
+ Oobe.showScreen({id: SCREEN_ACCOUNT_PICKER});
+ Oobe.resetSigninUI(true);
+ };
+
+ /**
+ * Clears error bubble as well as optional menus that could be open.
+ */
+ Oobe.clearErrors = function() {
+ var accessibilityMenu = $('accessibility-menu');
+ if (accessibilityMenu)
+ accessibilityMenu.hide();
+ DisplayManager.clearErrors();
+ };
+
+ /**
+ * Displays animations on successful authentication, that have to happen
+ * before login UI is dismissed.
+ */
+ Oobe.animateAuthenticationSuccess = function() {
+ login.HeaderBar.animateOut(function() {
+ chrome.send('unlockOnLoginSuccess');
+ });
+ };
+
+ /**
+ * Displays animations that have to happen once login UI is fully displayed.
+ */
+ Oobe.animateOnceFullyDisplayed = function() {
+ login.HeaderBar.animateIn(true, function() {
+ chrome.send('headerBarVisible');
+ });
+ };
+
+ /**
+ * Sets text content for a div with |labelId|.
+ * @param {string} labelId Id of the label div.
+ * @param {string} labelText Text for the label.
+ */
+ Oobe.setLabelText = function(labelId, labelText) {
+ DisplayManager.setLabelText(labelId, labelText);
+ };
+
+ /**
+ * Sets the text content of the enterprise info message.
+ * If the text is empty, the entire notification will be hidden.
+ * @param {string} messageText The message text.
+ */
+ Oobe.setEnterpriseInfo = function(messageText, assetId) {
+ DisplayManager.setEnterpriseInfo(messageText, assetId);
+ };
+
+ /**
+ * Updates the device requisition string shown in the requisition prompt.
+ * @param {string} requisition The device requisition.
+ */
+ Oobe.updateDeviceRequisition = function(requisition) {
+ Oobe.getInstance().updateDeviceRequisition(requisition);
+ };
+
+ /**
+ * Enforces focus on user pod of locked user.
+ */
+ Oobe.forceLockedUserPodFocus = function() {
+ login.AccountPickerScreen.forceLockedUserPodFocus();
+ };
+
+ /**
+ * Clears password field in user-pod.
+ */
+ Oobe.clearUserPodPassword = function() {
+ DisplayManager.clearUserPodPassword();
+ };
+
+ /**
+ * Restores input focus to currently selected pod.
+ */
+ Oobe.refocusCurrentPod = function() {
+ DisplayManager.refocusCurrentPod();
+ };
+
+ /**
+ * Some ForTesting APIs directly access to DOM. Because this script is loaded
+ * in header, DOM tree may not be available at beginning.
+ * In DOMContentLoaded, after Oobe.initialize() is done, this is marked to
+ * true, indicating ForTesting methods can be called.
+ * External script using ForTesting APIs should wait for this condition.
+ * @type {boolean}
+ */
+ Oobe.readyForTesting = false;
+
+ /**
+ * Skip to login screen for telemetry.
+ */
+ Oobe.skipToLoginForTesting = function() {
+ Oobe.disableSigninUI();
+ chrome.send('skipToLoginForTesting');
+ };
+
+ /**
+ * Login for telemetry.
+ * @param {string} username Login username.
+ * @param {string} password Login password.
+ * @param {boolean} enterpriseEnroll Login as an enterprise enrollment?
+ */
+ Oobe.loginForTesting = function(username, password, gaia_id,
+ enterpriseEnroll = false) {
+ // Helper method that runs |fn| after |screenName| is visible.
+ function waitForOobeScreen(screenName, fn) {
+ if (Oobe.getInstance().currentScreen &&
+ Oobe.getInstance().currentScreen.id === screenName) {
+ fn();
+ } else {
+ $('oobe').addEventListener('screenchanged', function handler(e) {
+ if (e.detail == screenName) {
+ $('oobe').removeEventListener('screenchanged', handler);
+ fn();
+ }
+ });
+ }
+ }
+
+ Oobe.disableSigninUI();
+ chrome.send('skipToLoginForTesting', [username]);
+
+ if (!enterpriseEnroll) {
+ chrome.send('completeLogin', [gaia_id, username, password, false]);
+ } else {
+ waitForOobeScreen('gaia-signin', function() {
+ chrome.send('toggleEnrollmentScreen');
+ chrome.send('toggleFakeEnrollment');
+ });
+
+ waitForOobeScreen('oauth-enrollment', function() {
+ chrome.send('oauthEnrollCompleteLogin', [username, 'authcode']);
+ chrome.send('completeLogin', [gaia_id, username, password, false]);
+ });
+ }
+ };
+
+ /**
+ * Guest login for telemetry.
+ */
+ Oobe.guestLoginForTesting = function() {
+ Oobe.skipToLoginForTesting();
+ chrome.send('launchIncognito');
+ };
+
+ /**
+ * Authenticate for telemetry - used for screenlocker.
+ * @param {string} username Login username.
+ * @param {string} password Login password.
+ */
+ Oobe.authenticateForTesting = function(username, password) {
+ Oobe.disableSigninUI();
+ chrome.send('authenticateUser', [username, password, false]);
+ };
+
+ /**
+ * Gaia login screen for telemetry.
+ */
+ Oobe.addUserForTesting = function() {
+ Oobe.skipToLoginForTesting();
+ chrome.send('addUser');
+ };
+
+ /**
+ * Shows the add user dialog. Used in browser tests.
+ */
+ Oobe.showAddUserForTesting = function() {
+ chrome.send('showAddUser');
+ };
+
+ /**
+ * Hotrod requisition for telemetry.
+ */
+ Oobe.remoraRequisitionForTesting = function() {
+ chrome.send('setDeviceRequisition', ['remora']);
+ };
+
+ /**
+ * Begin enterprise enrollment for telemetry.
+ */
+ Oobe.switchToEnterpriseEnrollmentForTesting = function() {
+ chrome.send('toggleEnrollmentScreen');
+ };
+
+ /**
+ * Finish enterprise enrollment for telemetry.
+ */
+ Oobe.enterpriseEnrollmentDone = function() {
+ chrome.send('oauthEnrollClose', ['done']);
+ };
+
+ /**
+ * Returns true if enrollment was successful. Dismisses the enrollment
+ * attribute screen if it's present.
+ */
+ Oobe.isEnrollmentSuccessfulForTest = function() {
+ if (document.querySelector('.oauth-enroll-state-attribute-prompt'))
+ chrome.send('oauthEnrollAttributes', ['', '']);
+
+ return $('oauth-enrollment').classList.contains(
+ 'oauth-enroll-state-success');
+ };
+
+ /**
+ * Shows/hides login UI control bar with buttons like [Shut down].
+ */
+ Oobe.showControlBar = function(show) {
+ Oobe.getInstance().headerHidden = !show;
+ };
+
+ /**
+ * Changes some UI which depends on the virtual keyboard being shown/hidden.
+ */
+ Oobe.setVirtualKeyboardShown = function(shown) {
+ Oobe.getInstance().virtualKeyboardShown = shown;
+ $('pod-row').setFocusedPodPinVisibility(!shown);
+ };
+
+ /**
+ * Sets the current size of the client area (display size).
+ * @param {number} width client area width
+ * @param {number} height client area height
+ */
+ Oobe.setClientAreaSize = function(width, height) {
+ Oobe.getInstance().setClientAreaSize(width, height);
+ };
+
+ // Export
+ return {
+ Oobe: Oobe
+ };
+});
+
+var Oobe = cr.ui.Oobe;
+
+// Allow selection events on components with editable text (password field)
+// bug (http://code.google.com/p/chromium/issues/detail?id=125863)
+disableTextSelectAndDrag(function(e) {
+ var src = e.target;
+ return src instanceof HTMLTextAreaElement ||
+ src instanceof HTMLInputElement &&
+ /text|password|search/.test(src.type);
+});
+
+
+(function() {
+ 'use strict';
+
+ document.addEventListener('DOMContentLoaded', function() {
+ try {
+ Oobe.initialize();
+ } finally {
+ // TODO(crbug.com/712078): Do not set readyForTesting in case of that
+ // initialize() is failed. Currently, in some situation, initialize()
+ // raises an exception unexpectedly. It means testing APIs should not
+ // be called then. However, checking it here now causes bots failures
+ // unfortunately. So, as a short term workaround, here set
+ // readyForTesting even on failures, just to make test bots happy.
+ Oobe.readyForTesting = true;
+ }
+ });
+
+ // Install a global error handler so stack traces are included in logs.
+ window.onerror = function(message, file, line, column, error) {
+ console.error(error.stack);
+ }
+})();

Powered by Google App Engine
This is Rietveld 408576698