| Index: chrome/browser/chromeos/settings/device_settings_provider.cc
|
| diff --git a/chrome/browser/chromeos/settings/device_settings_provider.cc b/chrome/browser/chromeos/settings/device_settings_provider.cc
|
| index 02e16e7a46ecf5f53167def8b5f3a44b2be8f312..41d55d4156c80674ded0dec7ed1202e797321d33 100644
|
| --- a/chrome/browser/chromeos/settings/device_settings_provider.cc
|
| +++ b/chrome/browser/chromeos/settings/device_settings_provider.cc
|
| @@ -479,11 +479,37 @@ void DeviceSettingsProvider::DoSet(const std::string& path,
|
| return;
|
| }
|
|
|
| - // TODO (ygorshenin@, crbug.com/230018)): use OwnerSettingsService::Set()
|
| - // here.
|
| - pending_changes_.push_back(PendingQueueElement(path, in_value.DeepCopy()));
|
| - if (!store_callback_factory_.HasWeakPtrs())
|
| - SetInPolicy();
|
| + if (device_settings_service_->HasPrivateOwnerKey()) {
|
| + // Directly set setting through OwnerSettingsService.
|
| + ownership::OwnerSettingsService* service =
|
| + device_settings_service_->GetOwnerSettingsService();
|
| + if (!service->Set(path, in_value)) {
|
| + NotifyObservers(path);
|
| + return;
|
| + }
|
| + } else {
|
| + // Temporary store new setting in
|
| + // |device_settings_|. |device_settings_| will be stored on a disk
|
| + // as soon as an ownership of device the will be taken.
|
| + OwnerSettingsServiceChromeOS::UpdateDeviceSettings(
|
| + path, in_value, device_settings_);
|
| + em::PolicyData data;
|
| + data.set_username(device_settings_service_->GetUsername());
|
| + CHECK(device_settings_.SerializeToString(data.mutable_policy_value()));
|
| +
|
| + // Set the cache to the updated value.
|
| + UpdateValuesCache(data, device_settings_, TEMPORARILY_UNTRUSTED);
|
| +
|
| + if (!device_settings_cache::Store(data, g_browser_process->local_state())) {
|
| + LOG(ERROR) << "Couldn't store to the temp storage.";
|
| + NotifyObservers(path);
|
| + return;
|
| + }
|
| + }
|
| +
|
| + bool metrics_value;
|
| + if (path == kStatsReportingPref && in_value.GetAsBoolean(&metrics_value))
|
| + ApplyMetricsSetting(false, metrics_value);
|
| }
|
|
|
| void DeviceSettingsProvider::OwnershipStatusChanged() {
|
| @@ -513,7 +539,14 @@ void DeviceSettingsProvider::OwnershipStatusChanged() {
|
| new_settings.MergeFrom(device_settings_);
|
| device_settings_.Swap(&new_settings);
|
| }
|
| - StoreDeviceSettings();
|
| +
|
| + scoped_ptr<em::PolicyData> policy(new em::PolicyData());
|
| + policy->set_username(device_settings_service_->GetUsername());
|
| + CHECK(device_settings_.SerializeToString(policy->mutable_policy_value()));
|
| + if (!device_settings_service_->GetOwnerSettingsService()
|
| + ->CommitTentativeDeviceSettings(policy.Pass())) {
|
| + LOG(ERROR) << "Can't store policy";
|
| + }
|
| }
|
|
|
| // The owner key might have become available, allowing migration to happen.
|
| @@ -545,50 +578,6 @@ void DeviceSettingsProvider::RetrieveCachedData() {
|
| UpdateValuesCache(policy_data, device_settings_, trusted_status_);
|
| }
|
|
|
| -void DeviceSettingsProvider::SetInPolicy() {
|
| - if (pending_changes_.empty()) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -
|
| - if (RequestTrustedEntity() != TRUSTED) {
|
| - // Re-sync device settings before proceeding.
|
| - device_settings_service_->Load();
|
| - return;
|
| - }
|
| -
|
| - std::string prop(pending_changes_.front().first);
|
| - scoped_ptr<base::Value> value(pending_changes_.front().second);
|
| - pending_changes_.pop_front();
|
| -
|
| - trusted_status_ = TEMPORARILY_UNTRUSTED;
|
| - OwnerSettingsServiceChromeOS::UpdateDeviceSettings(
|
| - prop, *value, device_settings_);
|
| -
|
| - bool metrics_value;
|
| - if (prop == kStatsReportingPref && value->GetAsBoolean(&metrics_value))
|
| - ApplyMetricsSetting(false, metrics_value);
|
| -
|
| - em::PolicyData data;
|
| - data.set_username(device_settings_service_->GetUsername());
|
| - CHECK(device_settings_.SerializeToString(data.mutable_policy_value()));
|
| -
|
| - // Set the cache to the updated value.
|
| - UpdateValuesCache(data, device_settings_, trusted_status_);
|
| -
|
| - if (ownership_status_ == DeviceSettingsService::OWNERSHIP_TAKEN) {
|
| - StoreDeviceSettings();
|
| - } else {
|
| - if (!device_settings_cache::Store(data, g_browser_process->local_state()))
|
| - LOG(ERROR) << "Couldn't store to the temp storage.";
|
| -
|
| - // OnStorePolicyCompleted won't get called in this case so proceed with any
|
| - // pending operations immediately.
|
| - if (!pending_changes_.empty())
|
| - SetInPolicy();
|
| - }
|
| -}
|
| -
|
| void DeviceSettingsProvider::UpdateValuesCache(
|
| const em::PolicyData& policy_data,
|
| const em::ChromeDeviceSettingsProto& settings,
|
| @@ -732,10 +721,6 @@ DeviceSettingsProvider::TrustedStatus
|
| void DeviceSettingsProvider::UpdateAndProceedStoring() {
|
| // Re-sync the cache from the service.
|
| UpdateFromService();
|
| -
|
| - // Trigger the next change if necessary.
|
| - if (trusted_status_ == TRUSTED && !pending_changes_.empty())
|
| - SetInPolicy();
|
| }
|
|
|
| bool DeviceSettingsProvider::UpdateFromService() {
|
| @@ -799,18 +784,6 @@ bool DeviceSettingsProvider::UpdateFromService() {
|
| return settings_loaded;
|
| }
|
|
|
| -void DeviceSettingsProvider::StoreDeviceSettings() {
|
| - // Mute all previous callbacks to guarantee the |pending_changes_| queue is
|
| - // processed serially.
|
| - store_callback_factory_.InvalidateWeakPtrs();
|
| -
|
| - device_settings_service_->SignAndStore(
|
| - scoped_ptr<em::ChromeDeviceSettingsProto>(
|
| - new em::ChromeDeviceSettingsProto(device_settings_)),
|
| - base::Bind(&DeviceSettingsProvider::UpdateAndProceedStoring,
|
| - store_callback_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| void DeviceSettingsProvider::AttemptMigration() {
|
| if (device_settings_service_->HasPrivateOwnerKey()) {
|
| PrefValueMap::const_iterator i;
|
|
|