Chromium Code Reviews| Index: chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc |
| diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc b/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc |
| index 248c8c5a418e5a3f28b738c3b628cc838bced5e4..6121589138fc5d1ea0f5986c28e8d2ffa4807bf0 100644 |
| --- a/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc |
| +++ b/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc |
| @@ -13,6 +13,7 @@ |
| #include "chrome/browser/chromeos/policy/enterprise_install_attributes.h" |
| #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" |
| #include "components/ownership/owner_key_util.h" |
| +#include "components/policy/core/common/cloud/cloud_policy_constants.h" |
| #include "policy/proto/device_management_backend.pb.h" |
| namespace em = enterprise_management; |
| @@ -136,6 +137,27 @@ void DeviceCloudPolicyStoreChromeOS::OnPolicyStored() { |
| } |
| void DeviceCloudPolicyStoreChromeOS::UpdateFromService() { |
| + const em::PolicyData* policy_data = device_settings_service_->policy_data(); |
| + if (policy_data) { |
| + const ManagementMode management_mode = GetManagementMode(*policy_data); |
| + if (management_mode == MANAGEMENT_MODE_CONSUMER_MANAGED || |
| + (management_mode == MANAGEMENT_MODE_LOCAL_OWNER && |
| + policy() && |
| + GetManagementMode(*policy()) == MANAGEMENT_MODE_CONSUMER_MANAGED)) { |
| + // For consumer-managed devices, or devices that were consumer-managed |
| + // and are now unmanaged, we clear the policy data and set the status to |
| + // success. The management mode is propagated so that the store knows if |
| + // it is consumer-managed. |
| + policy_.reset(new em::PolicyData()); |
|
Mattias Nissler (ping if slow)
2014/12/05 12:28:37
Why can't you just copy device_settings_service_->
|
| + policy_->set_management_mode(policy_data->management_mode()); |
| + PolicyMap new_policy_map; |
| + policy_map_.Swap(&new_policy_map); |
|
Mattias Nissler (ping if slow)
2014/12/05 12:28:37
Instead of swapping in an empty map, you could jus
|
| + status_ = STATUS_OK; |
| + NotifyStoreLoaded(); |
| + return; |
| + } |
| + } |
| + |
| if (!install_attributes_->IsEnterpriseDevice()) { |
| status_ = STATUS_BAD_STATE; |
| NotifyStoreError(); |
| @@ -157,8 +179,8 @@ void DeviceCloudPolicyStoreChromeOS::UpdateFromService() { |
| enrollment_validation_done_ = true; |
| const bool has_dm_token = |
| status == chromeos::DeviceSettingsService::STORE_SUCCESS && |
| - device_settings_service_->policy_data() && |
| - device_settings_service_->policy_data()->has_request_token(); |
| + policy_data && |
| + policy_data->has_request_token(); |
| // At the time LoginDisplayHostImpl decides whether enrollment flow is |
| // to be started, policy hasn't been read yet. To work around this, |
| @@ -186,8 +208,8 @@ void DeviceCloudPolicyStoreChromeOS::UpdateFromService() { |
| case chromeos::DeviceSettingsService::STORE_SUCCESS: { |
| status_ = STATUS_OK; |
| policy_.reset(new em::PolicyData()); |
| - if (device_settings_service_->policy_data()) |
| - policy_->MergeFrom(*device_settings_service_->policy_data()); |
| + if (policy_data) |
| + policy_->MergeFrom(*policy_data); |
| PolicyMap new_policy_map; |
| if (is_managed()) { |