Index: chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc |
diff --git a/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc b/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc |
index 3338b0d42dd4db4edfe558703e15990b91a3ecec..02c3c067a6cfe0d33a8ca7adfc8cbcf6d0083132 100644 |
--- a/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc |
+++ b/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc |
@@ -25,6 +25,8 @@ |
#include "chrome/browser/profiles/profile.h" |
#include "chromeos/attestation/attestation_flow.h" |
#include "chromeos/chromeos_switches.h" |
+#include "chromeos/dbus/auth_policy_client.h" |
+#include "chromeos/dbus/dbus_thread_manager.h" |
#include "google_apis/gaia/gaia_auth_util.h" |
#include "google_apis/gaia/gaia_urls.h" |
#include "net/http/http_status_code.h" |
@@ -250,6 +252,7 @@ void EnrollmentHandlerChromeOS::OnStoreError(CloudPolicyStore* store) { |
// enterprise-managed. |
return; |
} |
+ LOG(ERROR) << "Error in device policy store."; |
ReportResult(EnrollmentStatus::ForStoreError(store_->status(), |
store_->validation_status())); |
} |
@@ -488,14 +491,38 @@ void EnrollmentHandlerChromeOS::HandleStoreRobotAuthTokenResult(bool result) { |
return; |
} |
+ SetStep(STEP_STORE_POLICY); |
if (device_mode_ == policy::DEVICE_MODE_ENTERPRISE_AD) { |
- ReportResult(EnrollmentStatus::ForStatus(EnrollmentStatus::STATUS_SUCCESS)); |
+ CHECK(install_attributes_->IsActiveDirectoryManaged()); |
+ // Update device settings so that in case of Active Directory unsigned |
+ // policy is accepted. |
+ chromeos::DeviceSettingsService::Get()->SetDeviceMode( |
+ install_attributes_->GetMode()); |
+ chromeos::DBusThreadManager::Get() |
+ ->GetAuthPolicyClient() |
+ ->RefreshDevicePolicy(base::Bind( |
+ &EnrollmentHandlerChromeOS::HandleActiveDirectoryPolicyRefreshed, |
+ weak_ptr_factory_.GetWeakPtr())); |
} else { |
- SetStep(STEP_STORE_POLICY); |
store_->InstallInitialPolicy(*policy_); |
} |
} |
+void EnrollmentHandlerChromeOS::HandleActiveDirectoryPolicyRefreshed( |
+ bool success) { |
+ DCHECK_EQ(STEP_STORE_POLICY, enrollment_step_); |
+ |
+ if (!success) { |
+ LOG(ERROR) << "Failed to load Active Directory policy."; |
+ ReportResult(EnrollmentStatus::ForStatus( |
+ EnrollmentStatus::STATUS_ACTIVE_DIRECTORY_POLICY_FETCH_FAILED)); |
+ return; |
+ } |
+ |
+ // After that, the enrollment flow continues in one of the OnStore* observers. |
+ store_->Load(); |
+} |
+ |
void EnrollmentHandlerChromeOS::Stop() { |
if (client_.get()) |
client_->RemoveObserver(this); |