0

Consumer management enrollment signin screen change:

- Show Gaia signin page instead of account picker.
- Pre-fill owner email in Gaia signin page.
- Show only the enrollment message in Gaia screen right panel.
- Show only a cancel button (in addition to Shutdown) at the bottom.

BUG=chromium:353050
TEST=manually test the signin page.

Review URL: https://codereview.chromium.org/426153003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287143 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
davidyu@chromium.org
2014-08-02 01:32:40 +00:00
parent f4ca216b3b
commit 12d5de95a6
10 changed files with 117 additions and 11 deletions

@ -5053,6 +5053,9 @@ Battery full
<message name="IDS_LOGIN_CONNECTING_INDICATOR_TEXT" desc="A message to show telling the user that the device is attempting to re-connect to the network.">
Connecting and verifying<ph name="ANIMATED_ELLIPSIS">$1<ex>...</ex></ph>
</message>
<message name="IDS_LOGIN_CONSUMER_MANAGEMENT_ENROLLMENT" desc="A message to show at the signin page when consumer management enrollment is in progress.">
The owner must sign in to complete enrollment with Google Device Manager.
</message>
<!-- Idle warning dialog -->
<message name="IDS_IDLE_WARNING_TITLE" desc="Title of the warning dialog shown when the user becomes idle and is about to get logged out.">

@ -26,4 +26,10 @@
i18n-content="cancel"></button>
</button>
</div>
<div id="cancel-consumer-management-enrollment" class="header-bar-item"
hidden>
<button id="cancel-consumer-management-enrollment-button"
class="custom-appearance" i18n-content="cancel"></button>
</button>
</div>
</div>

@ -45,6 +45,9 @@ cr.define('login', function() {
this.handleSignoutClick_);
$('cancel-multiple-sign-in-button').addEventListener('click',
this.handleCancelMultipleSignInClick_);
$('cancel-consumer-management-enrollment-button')
.addEventListener('click',
this.handleCancelConsumerManagementEnrollmentClick_);
if (Oobe.getInstance().displayType == DISPLAY_TYPE.LOGIN ||
Oobe.getInstance().displayType == DISPLAY_TYPE.OOBE) {
if (Oobe.getInstance().newKioskUI)
@ -153,6 +156,16 @@ cr.define('login', function() {
e.stopPropagation();
},
/**
* Cancel consumer management enrollment button handler.
*
* @private
*/
handleCancelConsumerManagementEnrollmentClick_: function(e) {
chrome.send('cancelConsumerManagementEnrollment');
e.stopPropagation();
},
/**
* If true then "Browse as Guest" button is shown.
*
@ -213,6 +226,8 @@ cr.define('login', function() {
(this.signinUIState_ == SIGNIN_UI_STATE.WRONG_HWID_WARNING);
var isSamlPasswordConfirm =
(this.signinUIState_ == SIGNIN_UI_STATE.SAML_PASSWORD_CONFIRM);
var isEnrollingConsumerManagement = (this.signinUIState_ ==
SIGNIN_UI_STATE.CONSUMER_MANAGEMENT_ENROLLMENT);
var isMultiProfilesUI =
(Oobe.getInstance().displayType == DISPLAY_TYPE.USER_ADDING);
var isLockScreen =
@ -237,6 +252,8 @@ cr.define('login', function() {
$('apps-header-bar-item').hidden = !this.hasApps_ ||
(!gaiaIsActive && !accountPickerIsActive);
$('cancel-multiple-sign-in-item').hidden = !isMultiProfilesUI;
$('cancel-consumer-management-enrollment').hidden =
!isEnrollingConsumerManagement;
if (!Oobe.getInstance().newKioskUI) {
if (!$('apps-header-bar-item').hidden)

@ -24,6 +24,7 @@
<div id="createSupervisedUserLinkPlaceholder"></div>
<div id="createSupervisedUserNoManagerText" hidden></div>
</div>
<div id="consumerManagementEnrollment" class="signin-text"></div>
</div>
</div>
<div id="gaia-loading" class="step-loading">

@ -55,6 +55,13 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
*/
email: '',
/**
* Whether consumer management enrollment is in progress.
* @type {boolean}
* @private
*/
isEnrollingConsumerManagement_: false,
/**
* Timer id of pending load.
* @type {number}
@ -211,7 +218,10 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
*/
onBeforeShow: function(data) {
chrome.send('loginUIStateChanged', ['gaia-signin', true]);
$('login-header-bar').signinUIState = SIGNIN_UI_STATE.GAIA_SIGNIN;
$('login-header-bar').signinUIState =
this.isEnrollingConsumerManagement_ ?
SIGNIN_UI_STATE.CONSUMER_MANAGEMENT_ENROLLMENT :
SIGNIN_UI_STATE.GAIA_SIGNIN;
// Ensure that GAIA signin (or loading UI) is actually visible.
window.webkitRequestAnimationFrame(function() {
@ -308,14 +318,20 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
$('createSupervisedUserNoManagerText').textContent =
data.supervisedUsersRestrictionReason;
$('consumerManagementEnrollment').hidden =
!data.isEnrollingConsumerManagement;
this.isShowUsers_ = data.isShowUsers;
this.updateCancelButtonState();
this.isEnrollingConsumerManagement_ = data.isEnrollingConsumerManagement;
// Sign-in right panel is hidden if all of its items are hidden.
var noRightPanel = $('gaia-signin-reason').hidden &&
$('createAccount').hidden &&
$('guestSignin').hidden &&
$('createSupervisedUserPane').hidden;
$('createSupervisedUserPane').hidden &&
$('consumerManagementEnrollment').hidden;
this.classList.toggle('no-right-panel', noRightPanel);
if (Oobe.getInstance().currentScreen === this)
Oobe.getInstance().updateScreenSize(this);
@ -563,6 +579,8 @@ login.createScreen('GaiaSigninScreen', 'gaia-signin', function() {
'createSupervisedUser',
'<a id="createSupervisedUserLink" class="signin-link" href="#">',
'</a>');
$('consumerManagementEnrollment').innerHTML = loadTimeData.getString(
'consumerManagementEnrollmentSigninMessage');
$('createAccountLink').addEventListener('click', function(e) {
chrome.send('createAccount');
e.preventDefault();

@ -36,7 +36,8 @@ namespace {
const char kJsScreenPath[] = "login.GaiaSigninScreen";
void UpdateAuthParams(base::DictionaryValue* params, bool has_users) {
void UpdateAuthParams(base::DictionaryValue* params, bool has_users,
bool is_enrolling_consumer_management) {
CrosSettings* cros_settings = CrosSettings::Get();
bool allow_new_user = true;
cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user);
@ -73,7 +74,10 @@ void UpdateAuthParams(base::DictionaryValue* params, bool has_users) {
// Now check whether we're in multi-profiles user adding scenario and
// disable GAIA right panel features if that's the case.
if (UserAddingScreen::Get()->IsRunning()) {
// For consumer management enrollment, we also hide all right panel components
// and show only an enrollment message.
if (UserAddingScreen::Get()->IsRunning() ||
is_enrolling_consumer_management) {
params->SetBoolean("createAccount", false);
params->SetBoolean("guestSignin", false);
params->SetBoolean("supervisedUsersEnabled", false);
@ -116,6 +120,7 @@ GaiaScreenHandler::GaiaScreenHandler(
focus_stolen_(false),
gaia_silent_load_(false),
using_saml_api_(false),
is_enrolling_consumer_management_(false),
test_expects_complete_login_(false),
signin_screen_handler_(NULL),
weak_factory_(this) {
@ -134,8 +139,11 @@ void GaiaScreenHandler::LoadGaia(const GaiaContext& context) {
params.SetBoolean("isShowUsers", context.show_users);
params.SetBoolean("useOffline", context.use_offline);
params.SetString("email", context.email);
params.SetBoolean("isEnrollingConsumerManagement",
context.is_enrolling_consumer_management);
UpdateAuthParams(&params, context.has_users);
UpdateAuthParams(&params, context.has_users,
context.is_enrolling_consumer_management);
if (!context.use_offline) {
const std::string app_locale = g_browser_process->GetApplicationLocale();
@ -178,7 +186,8 @@ void GaiaScreenHandler::LoadGaia(const GaiaContext& context) {
void GaiaScreenHandler::UpdateGaia(const GaiaContext& context) {
base::DictionaryValue params;
UpdateAuthParams(&params, context.has_users);
UpdateAuthParams(&params, context.has_users,
context.is_enrolling_consumer_management);
CallJS("updateAuthExtension", params);
}
@ -209,6 +218,8 @@ void GaiaScreenHandler::DeclareLocalizedValues(
IDS_CREATE_LOCALLY_MANAGED_USER_HTML);
builder->Add("createSupervisedUserFeatureName",
IDS_CREATE_LOCALLY_MANAGED_USER_FEATURE_NAME);
builder->Add("consumerManagementEnrollmentSigninMessage",
IDS_LOGIN_CONSUMER_MANAGEMENT_ENROLLMENT);
// Strings used by the SAML fatal error dialog.
builder->Add("fatalErrorMessageNoEmail", IDS_LOGIN_FATAL_ERROR_NO_EMAIL);
@ -278,6 +289,14 @@ void GaiaScreenHandler::HandleCompleteAuthentication(
void GaiaScreenHandler::HandleCompleteLogin(const std::string& typed_email,
const std::string& password,
bool using_saml) {
std::string owner_email = UserManager::Get()->GetOwnerEmail();
if (is_enrolling_consumer_management_ && typed_email != owner_email) {
// Show Gaia signin page again since we only allow the owner to sign in.
populated_email_ = owner_email;
ShowGaia(is_enrolling_consumer_management_);
return;
}
if (!Delegate())
return;
@ -446,7 +465,8 @@ void GaiaScreenHandler::SetSAMLPrincipalsAPIUsed(bool api_used) {
UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.APIUsed", api_used);
}
void GaiaScreenHandler::ShowGaia() {
void GaiaScreenHandler::ShowGaia(bool is_enrolling_consumer_management) {
is_enrolling_consumer_management_ = is_enrolling_consumer_management;
if (gaia_silent_load_ && populated_email_.empty()) {
dns_cleared_ = true;
cookies_cleared_ = true;
@ -523,6 +543,7 @@ void GaiaScreenHandler::LoadAuthExtension(bool force,
password_changed_for_.count(populated_email_);
context.use_offline = offline;
context.email = populated_email_;
context.is_enrolling_consumer_management = is_enrolling_consumer_management_;
if (Delegate()) {
context.show_users = Delegate()->IsShowUsers();
context.has_users = !Delegate()->GetUsers().empty();

@ -39,6 +39,9 @@ struct GaiaContext {
// Email of current user.
std::string email;
// Whether consumer management enrollment is in progress.
bool is_enrolling_consumer_management;
};
// A class that handles WebUI hooks in Gaia screen.
@ -116,7 +119,7 @@ class GaiaScreenHandler : public BaseScreenHandler {
// principals API was used during SAML login.
void SetSAMLPrincipalsAPIUsed(bool api_used);
void ShowGaia();
void ShowGaia(bool is_enrolling_consumer_management);
// Shows signin screen after dns cache and cookie cleanup operations finish.
void ShowGaiaScreenIfReady();
@ -178,6 +181,9 @@ class GaiaScreenHandler : public BaseScreenHandler {
// API was used.
bool using_saml_api_;
// Whether consumer management enrollment is in progress.
bool is_enrolling_consumer_management_;
// Test credentials.
std::string test_user_;
std::string test_pass_;

@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/location.h"
#include "base/logging.h"
@ -35,6 +36,7 @@
#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
#include "chrome/browser/chromeos/login/ui/webui_login_display.h"
#include "chrome/browser/chromeos/login/users/multi_profile_user_controller.h"
#include "chrome/browser/chromeos/login/users/user_manager.h"
#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
@ -52,6 +54,7 @@
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/power_manager_client.h"
#include "chromeos/ime/ime_keyboard.h"
@ -295,6 +298,13 @@ SigninScreenHandler::SigninScreenHandler(
chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard();
if (keyboard)
keyboard->AddObserver(this);
CommandLine* command_line = CommandLine::ForCurrentProcess();
PrefService* prefs = g_browser_process->local_state();
is_enrolling_consumer_management_ =
command_line->HasSwitch(chromeos::switches::kEnableConsumerManagement) &&
prefs->GetBoolean(prefs::kConsumerManagementEnrollmentRequested);
}
SigninScreenHandler::~SigninScreenHandler() {
@ -418,7 +428,17 @@ void SigninScreenHandler::Show(const LoginScreenContext& context) {
// Just initialize internal fields from context and call ShowImpl().
oobe_ui_ = context.oobe_ui();
gaia_screen_handler_->PopulateEmail(context.email());
std::string email;
if (is_enrolling_consumer_management_) {
// We don't check if the value of the owner email is trusted because it is
// only used to pre-fill the email field in Gaia sign-in page and a cached
// value is sufficient.
CrosSettings::Get()->GetString(kDeviceOwner, &email);
} else {
email = context.email();
}
gaia_screen_handler_->PopulateEmail(email);
ShowImpl();
}
@ -457,7 +477,7 @@ void SigninScreenHandler::ShowImpl() {
return;
}
if (oobe_ui_) {
if (oobe_ui_ || is_enrolling_consumer_management_) {
// Shows new user sign-in for OOBE.
OnShowAddUser();
} else {
@ -749,6 +769,8 @@ void SigninScreenHandler::RegisterMessages() {
&SigninScreenHandler::HandleRetrieveAuthenticatedUserEmail);
AddCallback("getPublicSessionKeyboardLayouts",
&SigninScreenHandler::HandleGetPublicSessionKeyboardLayouts);
AddCallback("cancelConsumerManagementEnrollment",
&SigninScreenHandler::HandleCancelConsumerManagementEnrollment);
// This message is sent by the kiosk app menu, but is handled here
@ -1322,6 +1344,13 @@ void SigninScreenHandler::HandleLaunchKioskApp(const std::string& app_id,
delegate_->Login(context, specifics);
}
void SigninScreenHandler::HandleCancelConsumerManagementEnrollment() {
PrefService* prefs = g_browser_process->local_state();
prefs->SetBoolean(prefs::kConsumerManagementEnrollmentRequested, false);
is_enrolling_consumer_management_ = false;
ShowImpl();
}
bool SigninScreenHandler::AllWhitelistedUsersPresent() {
CrosSettings* cros_settings = CrosSettings::Get();
bool allow_new_user = false;
@ -1427,7 +1456,7 @@ void SigninScreenHandler::ContinueKioskEnableFlow(
void SigninScreenHandler::OnShowAddUser() {
is_account_picker_showing_first_time_ = false;
DCHECK(gaia_screen_handler_);
gaia_screen_handler_->ShowGaia();
gaia_screen_handler_->ShowGaia(is_enrolling_consumer_management_);
}
GaiaScreenHandler::FrameState SigninScreenHandler::FrameState() const {

@ -359,6 +359,7 @@ class SigninScreenHandler
void HandleRetrieveAuthenticatedUserEmail(double attempt_token);
void HandleGetPublicSessionKeyboardLayouts(const std::string& user_id,
const std::string& locale);
void HandleCancelConsumerManagementEnrollment();
// Sends the list of keyboard layouts available for the currently selected
// public session locale.
@ -470,6 +471,9 @@ class SigninScreenHandler
// Helper that retrieves the authenticated user's e-mail address.
scoped_ptr<AuthenticatedUserEmailRetriever> email_retriever_;
// Whether consumer management enrollment is in progress.
bool is_enrolling_consumer_management_;
base::WeakPtrFactory<SigninScreenHandler> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(SigninScreenHandler);

@ -55,6 +55,7 @@
WRONG_HWID_WARNING: 3,
SUPERVISED_USER_CREATION_FLOW: 4,
SAML_PASSWORD_CONFIRM: 5,
CONSUMER_MANAGEMENT_ENROLLMENT: 6,
};
/* Possible UI states of the error screen. */