// TODO(xiyuan): Find a better to share those constants.
/** @const */ var SCREEN_OOBE_NETWORK = 'connect';
+/** @const */ var SCREEN_OOBE_HID_DETECTION = 'hid-detection';
/** @const */ var SCREEN_OOBE_EULA = 'eula';
/** @const */ var SCREEN_OOBE_UPDATE = 'update';
+/** @const */ var SCREEN_OOBE_RESET = 'reset';
/** @const */ var SCREEN_OOBE_ENROLLMENT = 'oauth-enrollment';
/** @const */ var SCREEN_OOBE_KIOSK_ENABLE = 'kiosk-enable';
/** @const */ var SCREEN_GAIA_SIGNIN = 'gaia-signin';
/** @const */ var SCREEN_ACCOUNT_PICKER = 'account-picker';
-/** @const */ var SCREEN_ERROR_MESSAGE = 'error-message';
/** @const */ var SCREEN_USER_IMAGE_PICKER = 'user-image';
+/** @const */ var SCREEN_ERROR_MESSAGE = 'error-message';
/** @const */ var SCREEN_TPM_ERROR = 'tpm-error-message';
/** @const */ var SCREEN_PASSWORD_CHANGED = 'password-changed';
/** @const */ var SCREEN_CREATE_MANAGED_USER_FLOW =
/** @const */ var SCREEN_APP_LAUNCH_SPLASH = 'app-launch-splash';
/** @const */ var SCREEN_CONFIRM_PASSWORD = 'confirm-password';
/** @const */ var SCREEN_FATAL_ERROR = 'fatal-error';
+/** @const */ var SCREEN_KIOSK_ENABLE = 'kiosk-enable';
+/** @const */ var SCREEN_TERMS_OF_SERVICE = 'terms-of-service';
+/** @const */ var SCREEN_WRONG_HWID = 'wrong-hwid';
/* Accelerator identifiers. Must be kept in sync with webui_login_view.cc. */
/** @const */ var ACCELERATOR_CANCEL = 'cancel';
MANAGED_USER_CREATION_FLOW: 'ui-state-locally-managed',
KIOSK_MODE: 'ui-state-kiosk-mode',
LOCAL_STATE_ERROR: 'ui-state-local-state-error',
- AUTO_ENROLLMENT_ERROR: 'ui-state-auto-enrollment-error'
+ AUTO_ENROLLMENT_ERROR: 'ui-state-auto-enrollment-error',
+ ROLLBACK_ERROR: 'ui-state-rollback-error'
};
/* Possible types of UI. */
SCREEN_OOBE_EULA,
SCREEN_OOBE_UPDATE]
];
+ /**
+ * Group of screens (screen IDs) where factory-reset screen invocation is
+ * available.
+ * @type Array.<string>
+ * @const
+ */
+ var RESET_AVAILABLE_SCREEN_GROUP = [
+ SCREEN_OOBE_NETWORK,
+ SCREEN_OOBE_EULA,
+ SCREEN_OOBE_UPDATE,
+ SCREEN_OOBE_ENROLLMENT,
+ SCREEN_GAIA_SIGNIN,
+ SCREEN_ACCOUNT_PICKER,
+ SCREEN_KIOSK_ENABLE,
+ SCREEN_ERROR_MESSAGE,
+ SCREEN_USER_IMAGE_PICKER,
+ SCREEN_TPM_ERROR,
+ SCREEN_PASSWORD_CHANGED,
+ SCREEN_TERMS_OF_SERVICE,
+ SCREEN_WRONG_HWID,
+ SCREEN_CONFIRM_PASSWORD,
+ SCREEN_FATAL_ERROR
+ ];
+
+ /**
+ * Group of screens (screen IDs) that are not participating in
+ * left-current-right animation.
+ * @type Array.<string>
+ * @const
+ */
+ var NOT_ANIMATED_SCREEN_GROUP = [
+ SCREEN_OOBE_RESET
+ ];
+
+
+ /**
+ * OOBE screens group index.
+ */
+ var SCREEN_GROUP_OOBE = 0;
/**
* Constructor a display manager that manages initialization of screens,
this.forceKeyboardFlow_ = value;
if (value) {
keyboard.initializeKeyboardFlow();
- cr.ui.Dropdown.enableKeyboardFlow();
+ cr.ui.DropDown.enableKeyboardFlow();
+ for (var i = 0; i < this.screens_.length; ++i) {
+ var screen = $(this.screens_[i]);
+ if (screen.enableKeyboardFlow)
+ screen.enableKeyboardFlow();
+ }
}
},
* @param {string} name Accelerator name.
*/
handleAccelerator: function(name) {
+ var currentStepId = this.screens_[this.currentStep_];
if (name == ACCELERATOR_CANCEL) {
if (this.currentScreen.cancel) {
this.currentScreen.cancel();
}
} else if (name == ACCELERATOR_ENROLLMENT) {
- var currentStepId = this.screens_[this.currentStep_];
if (currentStepId == SCREEN_GAIA_SIGNIN ||
currentStepId == SCREEN_ACCOUNT_PICKER) {
chrome.send('toggleEnrollmentScreen');
this.currentScreen.cancelAutoEnrollment();
}
} else if (name == ACCELERATOR_KIOSK_ENABLE) {
- var currentStepId = this.screens_[this.currentStep_];
if (currentStepId == SCREEN_GAIA_SIGNIN ||
currentStepId == SCREEN_ACCOUNT_PICKER) {
chrome.send('toggleKioskEnableScreen');
if (this.allowToggleVersion_)
$('version-labels').hidden = !$('version-labels').hidden;
} else if (name == ACCELERATOR_RESET) {
- var currentStepId = this.screens_[this.currentStep_];
- if (currentStepId == SCREEN_GAIA_SIGNIN ||
- currentStepId == SCREEN_ACCOUNT_PICKER) {
+ if (RESET_AVAILABLE_SCREEN_GROUP.indexOf(currentStepId) != -1)
chrome.send('toggleResetScreen');
- }
} else if (name == ACCELERATOR_DEVICE_REQUISITION) {
if (this.isOobeUI())
this.showDeviceRequisitionPrompt_();
if (this.isOobeUI())
this.showDeviceRequisitionRemoraPrompt_();
} else if (name == ACCELERATOR_APP_LAUNCH_BAILOUT) {
- var currentStepId = this.screens_[this.currentStep_];
if (currentStepId == SCREEN_APP_LAUNCH_SPLASH)
chrome.send('cancelAppLaunch');
} else if (name == ACCELERATOR_APP_LAUNCH_NETWORK_CONFIG) {
- var currentStepId = this.screens_[this.currentStep_];
if (currentStepId == SCREEN_APP_LAUNCH_SPLASH)
chrome.send('networkConfigRequest');
}
}
},
+ screenIsAnimated_: function(screenId) {
+ return NOT_ANIMATED_SCREEN_GROUP.indexOf(screenId) != -1;
+ },
+
/**
* Updates a step's css classes to reflect left, current, or right position.
* @param {number} stepIndex step index.
header.classList.remove(states[i]);
}
}
+
step.classList.add(state);
header.classList.add(state);
},
$('oobe').className = nextStepId;
+ // Need to do this before calling newStep.onBeforeShow() so that new step
+ // is back in DOM tree and has correct offsetHeight / offsetWidth.
+ newStep.hidden = false;
+
if (newStep.onBeforeShow)
newStep.onBeforeShow(screenData);
newStep.classList.remove('hidden');
- if (this.isOobeUI()) {
+ if (this.isOobeUI() &&
+ this.screenIsAnimated_(nextStepId) &&
+ this.screenIsAnimated_(currentStepId)) {
// Start gliding animation for OOBE steps.
if (nextStepIndex > this.currentStep_) {
for (var i = this.currentStep_; i < nextStepIndex; ++i)
this.updateStep_(nextStepIndex, 'current');
}
} else {
- // Start fading animation for login display.
+ // Start fading animation for login display or reset screen.
oldStep.classList.add('faded');
newStep.classList.remove('faded');
+ if (!this.screenIsAnimated_(nextStepId)) {
+ newStep.classList.remove('left');
+ newStep.classList.remove('right');
+ }
}
this.disableButtons_(newStep, false);
// Default control to be focused (if specified).
var defaultControl = newStep.defaultControl;
+ var outerContainer = $('outer-container');
var innerContainer = $('inner-container');
+ var isOOBE = this.isOobeUI();
if (this.currentStep_ != nextStepIndex &&
!oldStep.classList.contains('hidden')) {
if (oldStep.classList.contains('animated')) {
oldStep.classList.contains('right')) {
innerContainer.classList.remove('animation');
oldStep.classList.add('hidden');
+ if (!isOOBE)
+ oldStep.hidden = true;
}
// Refresh defaultControl. It could have changed.
var defaultControl = newStep.defaultControl;
ensureTransitionEndEvent(oldStep, MAX_SCREEN_TRANSITION_DURATION);
} else {
oldStep.classList.add('hidden');
+ oldStep.hidden = true;
if (defaultControl)
defaultControl.focus();
}
innerContainer.addEventListener(
'webkitTransitionEnd', function f(e) {
innerContainer.removeEventListener('webkitTransitionEnd', f);
+ outerContainer.classList.remove('down');
$('progress-dots').classList.remove('down');
chrome.send('loginVisible', ['oobe']);
// Refresh defaultControl. It could have changed.
},
/**
+ * Initialized first group of OOBE screens.
+ */
+ initializeOOBEScreens: function() {
+ if (this.isOobeUI() && $('inner-container').classList.contains('down')) {
+ for (var i = 0, screen;
+ screen = $(SCREEN_GROUPS[SCREEN_GROUP_OOBE][i]); i++) {
+ screen.hidden = false;
+ }
+ }
+ },
+
+ /**
* Prepares screens to use in login display.
*/
prepareForLoginDisplay_: function() {
},
/**
- * Returns true if sign in UI should trigger wallpaper load on boot.
- */
- shouldLoadWallpaperOnBoot: function() {
- return loadTimeData.getString('bootIntoWallpaper') == 'on';
- },
-
- /**
* Sets or unsets given |className| for top-level container. Useful for
* customizing #inner-container with CSS rules. All classes set with with
* this method will be removed after screen change.
instance.displayType = DISPLAY_TYPE.LOGIN;
}
+ instance.initializeOOBEScreens();
+
window.addEventListener('resize', instance.onWindowResize_.bind(instance));
};