OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/device_settings_provider.h" | 5 #include "chrome/browser/chromeos/device_settings_provider.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 // If the value is not set we should try to migrate legacy consent file. | 75 // If the value is not set we should try to migrate legacy consent file. |
76 // Loading consent file state causes us to do blocking IO on UI thread. | 76 // Loading consent file state causes us to do blocking IO on UI thread. |
77 // Temporarily allow it until we fix http://crbug.com/62626 | 77 // Temporarily allow it until we fix http://crbug.com/62626 |
78 base::ThreadRestrictions::ScopedAllowIO allow_io; | 78 base::ThreadRestrictions::ScopedAllowIO allow_io; |
79 return GoogleUpdateSettings::GetCollectStatsConsent(); | 79 return GoogleUpdateSettings::GetCollectStatsConsent(); |
80 } | 80 } |
81 | 81 |
82 } // namespace | 82 } // namespace |
83 | 83 |
84 DeviceSettingsProvider::DeviceSettingsProvider( | 84 DeviceSettingsProvider::DeviceSettingsProvider( |
85 const NotifyObserversCallback& notify_cb) | 85 const NotifyObserversCallback& notify_cb, |
| 86 SignedSettingsHelper* signed_settings_helper) |
86 : CrosSettingsProvider(notify_cb), | 87 : CrosSettingsProvider(notify_cb), |
| 88 signed_settings_helper_(signed_settings_helper), |
87 ownership_status_(OwnershipService::GetSharedInstance()->GetStatus(true)), | 89 ownership_status_(OwnershipService::GetSharedInstance()->GetStatus(true)), |
88 migration_helper_(new SignedSettingsMigrationHelper()), | 90 migration_helper_(new SignedSettingsMigrationHelper()), |
89 retries_left_(kNumRetriesLimit), | 91 retries_left_(kNumRetriesLimit), |
90 trusted_(false) { | 92 trusted_(false) { |
91 // Register for notification when ownership is taken so that we can update | 93 // Register for notification when ownership is taken so that we can update |
92 // the |ownership_status_| and reload if needed. | 94 // the |ownership_status_| and reload if needed. |
93 registrar_.Add(this, chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, | 95 registrar_.Add(this, chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, |
94 content::NotificationService::AllSources()); | 96 content::NotificationService::AllSources()); |
95 // Make sure we have at least the cache data immediately. | 97 // Make sure we have at least the cache data immediately. |
96 RetrieveCachedData(); | 98 RetrieveCachedData(); |
97 // Start prefetching preferences. | 99 // Start prefetching preferences. |
98 Reload(); | 100 Reload(); |
99 } | 101 } |
100 | 102 |
101 DeviceSettingsProvider::~DeviceSettingsProvider() { | 103 DeviceSettingsProvider::~DeviceSettingsProvider() { |
102 } | 104 } |
103 | 105 |
104 void DeviceSettingsProvider::Reload() { | 106 void DeviceSettingsProvider::Reload() { |
105 // While fetching we can't trust the cache anymore. | 107 // While fetching we can't trust the cache anymore. |
106 trusted_ = false; | 108 trusted_ = false; |
107 if (ownership_status_ == OwnershipService::OWNERSHIP_NONE) { | 109 if (ownership_status_ == OwnershipService::OWNERSHIP_NONE) { |
108 RetrieveCachedData(); | 110 RetrieveCachedData(); |
109 } else { | 111 } else { |
110 // Retrieve the real data. | 112 // Retrieve the real data. |
111 SignedSettingsHelper::Get()->StartRetrievePolicyOp( | 113 signed_settings_helper_->StartRetrievePolicyOp( |
112 base::Bind(&DeviceSettingsProvider::OnRetrievePolicyCompleted, | 114 base::Bind(&DeviceSettingsProvider::OnRetrievePolicyCompleted, |
113 base::Unretained(this))); | 115 base::Unretained(this))); |
114 } | 116 } |
115 } | 117 } |
116 | 118 |
117 void DeviceSettingsProvider::DoSet(const std::string& path, | 119 void DeviceSettingsProvider::DoSet(const std::string& path, |
118 const base::Value& in_value) { | 120 const base::Value& in_value) { |
119 if (!UserManager::Get()->IsCurrentUserOwner() && | 121 if (!UserManager::Get()->IsCurrentUserOwner() && |
120 ownership_status_ != OwnershipService::OWNERSHIP_NONE) { | 122 ownership_status_ != OwnershipService::OWNERSHIP_NONE) { |
121 LOG(WARNING) << "Changing settings from non-owner, setting=" << path; | 123 LOG(WARNING) << "Changing settings from non-owner, setting=" << path; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 if (!pending_changes_.empty()) | 190 if (!pending_changes_.empty()) |
189 SetInPolicy(); | 191 SetInPolicy(); |
190 } else { | 192 } else { |
191 NOTREACHED(); | 193 NOTREACHED(); |
192 } | 194 } |
193 return; | 195 return; |
194 } | 196 } |
195 | 197 |
196 if (!RequestTrustedEntity()) { | 198 if (!RequestTrustedEntity()) { |
197 // Otherwise we should first reload and apply on top of that. | 199 // Otherwise we should first reload and apply on top of that. |
198 SignedSettingsHelper::Get()->StartRetrievePolicyOp( | 200 signed_settings_helper_->StartRetrievePolicyOp( |
199 base::Bind(&DeviceSettingsProvider::FinishSetInPolicy, | 201 base::Bind(&DeviceSettingsProvider::FinishSetInPolicy, |
200 base::Unretained(this))); | 202 base::Unretained(this))); |
201 return; | 203 return; |
202 } | 204 } |
203 | 205 |
204 trusted_ = false; | 206 trusted_ = false; |
205 em::PolicyData data = policy(); | 207 em::PolicyData data = policy(); |
206 em::ChromeDeviceSettingsProto pol; | 208 em::ChromeDeviceSettingsProto pol; |
207 pol.ParseFromString(data.policy_value()); | 209 pol.ParseFromString(data.policy_value()); |
208 if (prop == kAccountsPrefAllowNewUser) { | 210 if (prop == kAccountsPrefAllowNewUser) { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 // Set the cache to the updated value. | 300 // Set the cache to the updated value. |
299 policy_ = data; | 301 policy_ = data; |
300 UpdateValuesCache(); | 302 UpdateValuesCache(); |
301 | 303 |
302 if (!signed_settings_cache::Store(data, g_browser_process->local_state())) | 304 if (!signed_settings_cache::Store(data, g_browser_process->local_state())) |
303 LOG(ERROR) << "Couldn't store to the temp storage."; | 305 LOG(ERROR) << "Couldn't store to the temp storage."; |
304 | 306 |
305 if (ownership_status_ == OwnershipService::OWNERSHIP_TAKEN) { | 307 if (ownership_status_ == OwnershipService::OWNERSHIP_TAKEN) { |
306 em::PolicyFetchResponse policy_envelope; | 308 em::PolicyFetchResponse policy_envelope; |
307 policy_envelope.set_policy_data(policy_.SerializeAsString()); | 309 policy_envelope.set_policy_data(policy_.SerializeAsString()); |
308 SignedSettingsHelper::Get()->StartStorePolicyOp( | 310 signed_settings_helper_->StartStorePolicyOp( |
309 policy_envelope, | 311 policy_envelope, |
310 base::Bind(&DeviceSettingsProvider::OnStorePolicyCompleted, | 312 base::Bind(&DeviceSettingsProvider::OnStorePolicyCompleted, |
311 base::Unretained(this))); | 313 base::Unretained(this))); |
312 } else { | 314 } else { |
313 // OnStorePolicyCompleted won't get called in this case so proceed with any | 315 // OnStorePolicyCompleted won't get called in this case so proceed with any |
314 // pending operations immediately. | 316 // pending operations immediately. |
315 delete pending_changes_[0].second; | 317 delete pending_changes_[0].second; |
316 pending_changes_.erase(pending_changes_.begin()); | 318 pending_changes_.erase(pending_changes_.begin()); |
317 if (!pending_changes_.empty()) | 319 if (!pending_changes_.empty()) |
318 SetInPolicy(); | 320 SetInPolicy(); |
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
723 Reload(); | 725 Reload(); |
724 return; | 726 return; |
725 } | 727 } |
726 LOG(ERROR) << "No retries left"; | 728 LOG(ERROR) << "No retries left"; |
727 break; | 729 break; |
728 } | 730 } |
729 } | 731 } |
730 } | 732 } |
731 | 733 |
732 } // namespace chromeos | 734 } // namespace chromeos |
OLD | NEW |