Commit c81f5b20 authored by tnagel@chromium.org's avatar tnagel@chromium.org

Fix UI glitches in enterprise enrollment recovery.

Display the name of the domain for which enrollment is recovered and
restart the browser after enrollment recovery to avoid login screen
breakage.

BUG=389481

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@283763 0039d316-1c4b-4281-b951-d872f2087c98
parent 86262b2a
......@@ -55,6 +55,7 @@
#include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/chromeos/timezone/timezone_provider.h"
#include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/options/options_util.h"
......@@ -204,6 +205,7 @@ WizardController::WizardController(chromeos::LoginDisplayHost* host,
oobe_display_(oobe_display),
usage_statistics_reporting_(true),
skip_update_enroll_after_eula_(false),
enrollment_recovery_(ShouldRecoverEnrollment()),
login_screen_started_(false),
user_image_screen_return_to_previous_hack_(false),
timezone_resolved_(false),
......@@ -491,18 +493,20 @@ void WizardController::ShowEnrollmentScreen() {
screen_parameters_->GetString("user", &user);
}
EnrollmentScreenActor::EnrollmentMode mode;
if (is_auto_enrollment)
EnrollmentScreenActor::EnrollmentMode mode =
EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL;
EnrollmentScreen* screen = GetEnrollmentScreen();
std::string enrollment_domain = GetForcedEnrollmentDomain();
if (is_auto_enrollment) {
mode = EnrollmentScreenActor::ENROLLMENT_MODE_AUTO;
else if (ShouldRecoverEnrollment())
} else if (enrollment_recovery_) {
mode = EnrollmentScreenActor::ENROLLMENT_MODE_RECOVERY;
else if (ShouldAutoStartEnrollment() && !CanExitEnrollment())
enrollment_domain = GetEnrollmentRecoveryDomain();
} else if (ShouldAutoStartEnrollment() && !CanExitEnrollment()) {
mode = EnrollmentScreenActor::ENROLLMENT_MODE_FORCED;
else
mode = EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL;
}
EnrollmentScreen* screen = GetEnrollmentScreen();
screen->SetParameters(mode, GetForcedEnrollmentDomain(), user);
screen->SetParameters(mode, enrollment_domain, user);
SetCurrentScreen(screen);
}
......@@ -732,7 +736,7 @@ void WizardController::OnUserImageSkipped() {
void WizardController::OnEnrollmentDone() {
// Mark OOBE as completed only if enterprise enrollment was part of the
// forced flow (i.e. app kiosk).
if (ShouldAutoStartEnrollment() || ShouldRecoverEnrollment())
if (ShouldAutoStartEnrollment() || enrollment_recovery_)
PerformOOBECompletedActions();
// TODO(mnissler): Unify the logic for auto-login for Public Sessions and
......@@ -777,7 +781,7 @@ void WizardController::OnAutoEnrollmentDone() {
}
void WizardController::OnOOBECompleted() {
if (ShouldAutoStartEnrollment() || ShouldRecoverEnrollment()) {
if (ShouldAutoStartEnrollment() || enrollment_recovery_) {
ShowEnrollmentScreen();
} else {
PerformOOBECompletedActions();
......@@ -845,6 +849,9 @@ void WizardController::PerformOOBECompletedActions() {
GetLocalState()->GetInteger(prefs::kTimesHIDDialogShown));
GetLocalState()->ClearPref(prefs::kTimesHIDDialogShown);
StartupUtils::MarkOobeCompleted();
if (enrollment_recovery_)
chrome::AttemptRestart();
}
void WizardController::SetCurrentScreen(WizardScreen* new_current) {
......@@ -1142,6 +1149,17 @@ bool WizardController::ShouldRecoverEnrollment() {
return dcp_initializer && dcp_initializer->ShouldRecoverEnrollment();
}
// static
std::string WizardController::GetEnrollmentRecoveryDomain() {
policy::BrowserPolicyConnectorChromeOS* connector =
g_browser_process->platform_part()->browser_policy_connector_chromeos();
policy::DeviceCloudPolicyInitializer* dcp_initializer =
connector->GetDeviceCloudPolicyInitializer();
if (!dcp_initializer)
return std::string();
return dcp_initializer->GetEnrollmentRecoveryDomain();
}
// static
bool WizardController::CanExitEnrollment() {
policy::BrowserPolicyConnectorChromeOS* connector =
......
......@@ -101,9 +101,13 @@ class WizardController : public ScreenObserver {
// Checks whether OOBE should start enrollment automatically.
static bool ShouldAutoStartEnrollment();
// Checks whether OOBE should recover enrollment.
// Checks whether OOBE should recover enrollment. Note that this flips to
// false once device policy has been restored as a part of recovery.
static bool ShouldRecoverEnrollment();
// Obtains domain the device used to be enrolled to from install attributes.
static std::string GetEnrollmentRecoveryDomain();
// Shows the first screen defined by |first_screen_name| or by default
// if the parameter is empty. Takes ownership of |screen_parameters|.
void Init(const std::string& first_screen_name,
......@@ -373,6 +377,10 @@ class WizardController : public ScreenObserver {
// EULA is accepted.
bool skip_update_enroll_after_eula_;
// Whether enrollment will be or has been recovered in the current wizard
// instance.
bool enrollment_recovery_;
// Time when the EULA was accepted. Used to measure the duration from the EULA
// acceptance until the Sign-In screen is displayed.
base::Time time_eula_accepted_;
......
......@@ -140,6 +140,10 @@ bool DeviceCloudPolicyInitializer::ShouldRecoverEnrollment() const {
return false;
}
std::string DeviceCloudPolicyInitializer::GetEnrollmentRecoveryDomain() const {
return install_attributes_->GetDomain();
}
bool DeviceCloudPolicyInitializer::CanExitEnrollment() const {
if (GetRestoreMode() == kDeviceStateRestoreModeReEnrollmentEnforced)
return false;
......
......@@ -75,6 +75,9 @@ class DeviceCloudPolicyInitializer : public CloudPolicyStore::Observer {
// Checks whether enterprise enrollment recovery is required.
bool ShouldRecoverEnrollment() const;
// Looks up the domain from |install_attributes_|.
std::string GetEnrollmentRecoveryDomain() const;
// Checks whether the user can cancel enrollment.
bool CanExitEnrollment() const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment