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 @@ ...@@ -55,6 +55,7 @@
#include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h" #include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h"
#include "chrome/browser/chromeos/settings/cros_settings.h" #include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/chromeos/timezone/timezone_provider.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.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/options/options_util.h" #include "chrome/browser/ui/options/options_util.h"
...@@ -204,6 +205,7 @@ WizardController::WizardController(chromeos::LoginDisplayHost* host, ...@@ -204,6 +205,7 @@ WizardController::WizardController(chromeos::LoginDisplayHost* host,
oobe_display_(oobe_display), oobe_display_(oobe_display),
usage_statistics_reporting_(true), usage_statistics_reporting_(true),
skip_update_enroll_after_eula_(false), skip_update_enroll_after_eula_(false),
enrollment_recovery_(ShouldRecoverEnrollment()),
login_screen_started_(false), login_screen_started_(false),
user_image_screen_return_to_previous_hack_(false), user_image_screen_return_to_previous_hack_(false),
timezone_resolved_(false), timezone_resolved_(false),
...@@ -491,18 +493,20 @@ void WizardController::ShowEnrollmentScreen() { ...@@ -491,18 +493,20 @@ void WizardController::ShowEnrollmentScreen() {
screen_parameters_->GetString("user", &user); screen_parameters_->GetString("user", &user);
} }
EnrollmentScreenActor::EnrollmentMode mode; EnrollmentScreenActor::EnrollmentMode mode =
if (is_auto_enrollment) EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL;
EnrollmentScreen* screen = GetEnrollmentScreen();
std::string enrollment_domain = GetForcedEnrollmentDomain();
if (is_auto_enrollment) {
mode = EnrollmentScreenActor::ENROLLMENT_MODE_AUTO; mode = EnrollmentScreenActor::ENROLLMENT_MODE_AUTO;
else if (ShouldRecoverEnrollment()) } else if (enrollment_recovery_) {
mode = EnrollmentScreenActor::ENROLLMENT_MODE_RECOVERY; mode = EnrollmentScreenActor::ENROLLMENT_MODE_RECOVERY;
else if (ShouldAutoStartEnrollment() && !CanExitEnrollment()) enrollment_domain = GetEnrollmentRecoveryDomain();
} else if (ShouldAutoStartEnrollment() && !CanExitEnrollment()) {
mode = EnrollmentScreenActor::ENROLLMENT_MODE_FORCED; mode = EnrollmentScreenActor::ENROLLMENT_MODE_FORCED;
else }
mode = EnrollmentScreenActor::ENROLLMENT_MODE_MANUAL;
EnrollmentScreen* screen = GetEnrollmentScreen(); screen->SetParameters(mode, enrollment_domain, user);
screen->SetParameters(mode, GetForcedEnrollmentDomain(), user);
SetCurrentScreen(screen); SetCurrentScreen(screen);
} }
...@@ -732,7 +736,7 @@ void WizardController::OnUserImageSkipped() { ...@@ -732,7 +736,7 @@ void WizardController::OnUserImageSkipped() {
void WizardController::OnEnrollmentDone() { void WizardController::OnEnrollmentDone() {
// Mark OOBE as completed only if enterprise enrollment was part of the // Mark OOBE as completed only if enterprise enrollment was part of the
// forced flow (i.e. app kiosk). // forced flow (i.e. app kiosk).
if (ShouldAutoStartEnrollment() || ShouldRecoverEnrollment()) if (ShouldAutoStartEnrollment() || enrollment_recovery_)
PerformOOBECompletedActions(); PerformOOBECompletedActions();
// TODO(mnissler): Unify the logic for auto-login for Public Sessions and // TODO(mnissler): Unify the logic for auto-login for Public Sessions and
...@@ -777,7 +781,7 @@ void WizardController::OnAutoEnrollmentDone() { ...@@ -777,7 +781,7 @@ void WizardController::OnAutoEnrollmentDone() {
} }
void WizardController::OnOOBECompleted() { void WizardController::OnOOBECompleted() {
if (ShouldAutoStartEnrollment() || ShouldRecoverEnrollment()) { if (ShouldAutoStartEnrollment() || enrollment_recovery_) {
ShowEnrollmentScreen(); ShowEnrollmentScreen();
} else { } else {
PerformOOBECompletedActions(); PerformOOBECompletedActions();
...@@ -845,6 +849,9 @@ void WizardController::PerformOOBECompletedActions() { ...@@ -845,6 +849,9 @@ void WizardController::PerformOOBECompletedActions() {
GetLocalState()->GetInteger(prefs::kTimesHIDDialogShown)); GetLocalState()->GetInteger(prefs::kTimesHIDDialogShown));
GetLocalState()->ClearPref(prefs::kTimesHIDDialogShown); GetLocalState()->ClearPref(prefs::kTimesHIDDialogShown);
StartupUtils::MarkOobeCompleted(); StartupUtils::MarkOobeCompleted();
if (enrollment_recovery_)
chrome::AttemptRestart();
} }
void WizardController::SetCurrentScreen(WizardScreen* new_current) { void WizardController::SetCurrentScreen(WizardScreen* new_current) {
...@@ -1142,6 +1149,17 @@ bool WizardController::ShouldRecoverEnrollment() { ...@@ -1142,6 +1149,17 @@ bool WizardController::ShouldRecoverEnrollment() {
return dcp_initializer && dcp_initializer->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 // static
bool WizardController::CanExitEnrollment() { bool WizardController::CanExitEnrollment() {
policy::BrowserPolicyConnectorChromeOS* connector = policy::BrowserPolicyConnectorChromeOS* connector =
......
...@@ -101,9 +101,13 @@ class WizardController : public ScreenObserver { ...@@ -101,9 +101,13 @@ class WizardController : public ScreenObserver {
// Checks whether OOBE should start enrollment automatically. // Checks whether OOBE should start enrollment automatically.
static bool ShouldAutoStartEnrollment(); 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(); 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 // Shows the first screen defined by |first_screen_name| or by default
// if the parameter is empty. Takes ownership of |screen_parameters|. // if the parameter is empty. Takes ownership of |screen_parameters|.
void Init(const std::string& first_screen_name, void Init(const std::string& first_screen_name,
...@@ -373,6 +377,10 @@ class WizardController : public ScreenObserver { ...@@ -373,6 +377,10 @@ class WizardController : public ScreenObserver {
// EULA is accepted. // EULA is accepted.
bool skip_update_enroll_after_eula_; 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 // Time when the EULA was accepted. Used to measure the duration from the EULA
// acceptance until the Sign-In screen is displayed. // acceptance until the Sign-In screen is displayed.
base::Time time_eula_accepted_; base::Time time_eula_accepted_;
......
...@@ -140,6 +140,10 @@ bool DeviceCloudPolicyInitializer::ShouldRecoverEnrollment() const { ...@@ -140,6 +140,10 @@ bool DeviceCloudPolicyInitializer::ShouldRecoverEnrollment() const {
return false; return false;
} }
std::string DeviceCloudPolicyInitializer::GetEnrollmentRecoveryDomain() const {
return install_attributes_->GetDomain();
}
bool DeviceCloudPolicyInitializer::CanExitEnrollment() const { bool DeviceCloudPolicyInitializer::CanExitEnrollment() const {
if (GetRestoreMode() == kDeviceStateRestoreModeReEnrollmentEnforced) if (GetRestoreMode() == kDeviceStateRestoreModeReEnrollmentEnforced)
return false; return false;
......
...@@ -75,6 +75,9 @@ class DeviceCloudPolicyInitializer : public CloudPolicyStore::Observer { ...@@ -75,6 +75,9 @@ class DeviceCloudPolicyInitializer : public CloudPolicyStore::Observer {
// Checks whether enterprise enrollment recovery is required. // Checks whether enterprise enrollment recovery is required.
bool ShouldRecoverEnrollment() const; bool ShouldRecoverEnrollment() const;
// Looks up the domain from |install_attributes_|.
std::string GetEnrollmentRecoveryDomain() const;
// Checks whether the user can cancel enrollment. // Checks whether the user can cancel enrollment.
bool CanExitEnrollment() const; 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