Index: chrome/browser/chromeos/login/wizard_controller.cc |
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc |
index e4fa0c34a21c570df21dadeedd934bdc63887281..aa4635159dfad9189259e4fbdaffe0872b25292b 100644 |
--- a/chrome/browser/chromeos/login/wizard_controller.cc |
+++ b/chrome/browser/chromeos/login/wizard_controller.cc |
@@ -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) { |
@@ -1143,6 +1150,17 @@ bool WizardController::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 = |
g_browser_process->platform_part()->browser_policy_connector_chromeos(); |