Chromium Code Reviews| Index: chrome/browser/chromeos/policy/device_cloud_policy_initializer.cc |
| diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_initializer.cc b/chrome/browser/chromeos/policy/device_cloud_policy_initializer.cc |
| index fff337fcc7a73dae4283215ab1ff62f81831e130..b4c31c3de9254e7f379ee84533991775e5049573 100644 |
| --- a/chrome/browser/chromeos/policy/device_cloud_policy_initializer.cc |
| +++ b/chrome/browser/chromeos/policy/device_cloud_policy_initializer.cc |
| @@ -57,7 +57,8 @@ DeviceCloudPolicyInitializer::DeviceCloudPolicyInitializer( |
| ServerBackedStateKeysBroker* state_keys_broker, |
| DeviceCloudPolicyStoreChromeOS* device_store, |
| DeviceCloudPolicyManagerChromeOS* manager, |
| - chromeos::DeviceSettingsService* device_settings_service) |
| + chromeos::DeviceSettingsService* device_settings_service, |
| + ConsumerManagementService* consumer_management_service) |
| : local_state_(local_state), |
| enterprise_service_(enterprise_service), |
| consumer_service_(consumer_service), |
| @@ -67,6 +68,7 @@ DeviceCloudPolicyInitializer::DeviceCloudPolicyInitializer( |
| device_store_(device_store), |
| manager_(manager), |
| device_settings_service_(device_settings_service), |
| + consumer_management_service_(consumer_management_service), |
| is_initialized_(false) { |
| } |
| @@ -79,6 +81,8 @@ void DeviceCloudPolicyInitializer::Init() { |
| is_initialized_ = true; |
| device_store_->AddObserver(this); |
| + if (consumer_management_service_) |
| + consumer_management_service_->AddObserver(this); |
| state_keys_update_subscription_ = state_keys_broker_->RegisterUpdateCallback( |
| base::Bind(&DeviceCloudPolicyInitializer::TryToCreateClient, |
| base::Unretained(this))); |
| @@ -95,6 +99,8 @@ void DeviceCloudPolicyInitializer::Init() { |
| void DeviceCloudPolicyInitializer::Shutdown() { |
| DCHECK(is_initialized_); |
| + if (consumer_management_service_) |
| + consumer_management_service_->RemoveObserver(this); |
| device_store_->RemoveObserver(this); |
| device_status_provider_.reset(); |
| enrollment_handler_.reset(); |
| @@ -189,6 +195,10 @@ void DeviceCloudPolicyInitializer::OnStoreError(CloudPolicyStore* store) { |
| // Do nothing. |
| } |
| +void DeviceCloudPolicyInitializer::OnConsumerManagementStatusChanged() { |
| + TryToCreateClient(); |
| +} |
| + |
| void DeviceCloudPolicyInitializer::EnrollmentCompleted( |
| const EnrollmentCallback& enrollment_callback, |
| EnrollmentStatus status) { |
| @@ -224,21 +234,23 @@ scoped_ptr<CloudPolicyClient> DeviceCloudPolicyInitializer::CreateClient( |
| } |
| void DeviceCloudPolicyInitializer::TryToCreateClient() { |
| - if (device_store_->is_initialized() && |
| - device_store_->has_policy() && |
| - !device_store_->policy()->request_token().empty() && |
| - !state_keys_broker_->pending() && |
| - !enrollment_handler_) { |
| - DeviceManagementService* service = NULL; |
| - if (device_store_->policy()->management_mode() == |
| - em::PolicyData::CONSUMER_MANAGED) { |
| - service = consumer_service_; |
| - } else { |
| - service = enterprise_service_; |
| - } |
| - if (service) |
| - StartConnection(CreateClient(service)); |
| + if (enrollment_handler_ || state_keys_broker_->pending()) |
| + return; |
| + |
| + DeviceManagementService* service = NULL; |
|
bartfab (slow)
2014/11/28 13:25:18
Nit: s/NULL/nullptr/
davidyu
2014/12/01 17:05:22
Done.
|
| + if (consumer_management_service_ && |
| + consumer_management_service_->IsManaged()) { |
| + service = consumer_service_; |
| + } else if (device_store_->is_initialized() && |
| + device_store_->has_policy() && |
| + !device_store_->policy()->request_token().empty()) { |
| + DCHECK_NE(em::PolicyData::CONSUMER_MANAGED, |
| + device_store_->policy()->management_mode()); |
| + service = enterprise_service_; |
| } |
| + |
| + if (service) |
| + StartConnection(CreateClient(service)); |
| } |
| void DeviceCloudPolicyInitializer::StartConnection( |