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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 // If the value is not set we should try to migrate legacy consent file. | 74 // If the value is not set we should try to migrate legacy consent file. |
75 // Loading consent file state causes us to do blocking IO on UI thread. | 75 // Loading consent file state causes us to do blocking IO on UI thread. |
76 // Temporarily allow it until we fix http://crbug.com/62626 | 76 // Temporarily allow it until we fix http://crbug.com/62626 |
77 base::ThreadRestrictions::ScopedAllowIO allow_io; | 77 base::ThreadRestrictions::ScopedAllowIO allow_io; |
78 return GoogleUpdateSettings::GetCollectStatsConsent(); | 78 return GoogleUpdateSettings::GetCollectStatsConsent(); |
79 } | 79 } |
80 | 80 |
81 } // namespace | 81 } // namespace |
82 | 82 |
83 DeviceSettingsProvider::DeviceSettingsProvider( | 83 DeviceSettingsProvider::DeviceSettingsProvider( |
| 84 const NotifyObserversCallback& notify_cb, |
| 85 SignedSettingsHelper* signed_settings_helper, |
| 86 OwnershipService::Status ownership_status) |
| 87 : CrosSettingsProvider(notify_cb), |
| 88 signed_settings_helper_(signed_settings_helper), |
| 89 ownership_status_(ownership_status), |
| 90 migration_helper_(new SignedSettingsMigrationHelper()), |
| 91 retries_left_(kNumRetriesLimit), |
| 92 trusted_(false) { |
| 93 Initialize(); |
| 94 } |
| 95 |
| 96 DeviceSettingsProvider::DeviceSettingsProvider( |
84 const NotifyObserversCallback& notify_cb) | 97 const NotifyObserversCallback& notify_cb) |
85 : CrosSettingsProvider(notify_cb), | 98 : CrosSettingsProvider(notify_cb), |
| 99 signed_settings_helper_(SignedSettingsHelper::Get()), |
86 ownership_status_(OwnershipService::GetSharedInstance()->GetStatus(true)), | 100 ownership_status_(OwnershipService::GetSharedInstance()->GetStatus(true)), |
87 migration_helper_(new SignedSettingsMigrationHelper()), | 101 migration_helper_(new SignedSettingsMigrationHelper()), |
88 retries_left_(kNumRetriesLimit), | 102 retries_left_(kNumRetriesLimit), |
89 trusted_(false) { | 103 trusted_(false) { |
| 104 Initialize(); |
| 105 } |
| 106 |
| 107 DeviceSettingsProvider::~DeviceSettingsProvider() { |
| 108 } |
| 109 |
| 110 void DeviceSettingsProvider::Initialize() { |
90 // Register for notification when ownership is taken so that we can update | 111 // Register for notification when ownership is taken so that we can update |
91 // the |ownership_status_| and reload if needed. | 112 // the |ownership_status_| and reload if needed. |
92 registrar_.Add(this, chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, | 113 registrar_.Add(this, chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, |
93 content::NotificationService::AllSources()); | 114 content::NotificationService::AllSources()); |
94 // Make sure we have at least the cache data immediately. | 115 // Make sure we have at least the cache data immediately. |
95 RetrieveCachedData(); | 116 RetrieveCachedData(); |
96 // Start prefetching preferences. | 117 // Start prefetching preferences. |
97 Reload(); | 118 Reload(); |
98 } | 119 } |
99 | 120 |
100 DeviceSettingsProvider::~DeviceSettingsProvider() { | |
101 } | |
102 | |
103 void DeviceSettingsProvider::Reload() { | 121 void DeviceSettingsProvider::Reload() { |
104 // While fetching we can't trust the cache anymore. | 122 // While fetching we can't trust the cache anymore. |
105 trusted_ = false; | 123 trusted_ = false; |
106 if (ownership_status_ == OwnershipService::OWNERSHIP_NONE) { | 124 if (ownership_status_ == OwnershipService::OWNERSHIP_NONE) { |
107 RetrieveCachedData(); | 125 RetrieveCachedData(); |
108 } else { | 126 } else { |
109 // Retrieve the real data. | 127 // Retrieve the real data. |
110 SignedSettingsHelper::Get()->StartRetrievePolicyOp( | 128 signed_settings_helper_->StartRetrievePolicyOp( |
111 base::Bind(&DeviceSettingsProvider::OnRetrievePolicyCompleted, | 129 base::Bind(&DeviceSettingsProvider::OnRetrievePolicyCompleted, |
112 base::Unretained(this))); | 130 base::Unretained(this))); |
113 } | 131 } |
114 } | 132 } |
115 | 133 |
116 void DeviceSettingsProvider::DoSet(const std::string& path, | 134 void DeviceSettingsProvider::DoSet(const std::string& path, |
117 const base::Value& in_value) { | 135 const base::Value& in_value) { |
118 if (!UserManager::Get()->IsCurrentUserOwner() && | 136 if (!UserManager::Get()->IsCurrentUserOwner() && |
119 ownership_status_ != OwnershipService::OWNERSHIP_NONE) { | 137 ownership_status_ != OwnershipService::OWNERSHIP_NONE) { |
120 LOG(WARNING) << "Changing settings from non-owner, setting=" << path; | 138 LOG(WARNING) << "Changing settings from non-owner, setting=" << path; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 if (!pending_changes_.empty()) | 205 if (!pending_changes_.empty()) |
188 SetInPolicy(); | 206 SetInPolicy(); |
189 } else { | 207 } else { |
190 NOTREACHED(); | 208 NOTREACHED(); |
191 } | 209 } |
192 return; | 210 return; |
193 } | 211 } |
194 | 212 |
195 if (!RequestTrustedEntity()) { | 213 if (!RequestTrustedEntity()) { |
196 // Otherwise we should first reload and apply on top of that. | 214 // Otherwise we should first reload and apply on top of that. |
197 SignedSettingsHelper::Get()->StartRetrievePolicyOp( | 215 signed_settings_helper_->StartRetrievePolicyOp( |
198 base::Bind(&DeviceSettingsProvider::FinishSetInPolicy, | 216 base::Bind(&DeviceSettingsProvider::FinishSetInPolicy, |
199 base::Unretained(this))); | 217 base::Unretained(this))); |
200 return; | 218 return; |
201 } | 219 } |
202 | 220 |
203 trusted_ = false; | 221 trusted_ = false; |
204 em::PolicyData data = policy(); | 222 em::PolicyData data = policy(); |
205 em::ChromeDeviceSettingsProto pol; | 223 em::ChromeDeviceSettingsProto pol; |
206 pol.ParseFromString(data.policy_value()); | 224 pol.ParseFromString(data.policy_value()); |
207 if (prop == kAccountsPrefAllowNewUser) { | 225 if (prop == kAccountsPrefAllowNewUser) { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 // Set the cache to the updated value. | 314 // Set the cache to the updated value. |
297 policy_ = data; | 315 policy_ = data; |
298 UpdateValuesCache(); | 316 UpdateValuesCache(); |
299 | 317 |
300 if (!signed_settings_cache::Store(data, g_browser_process->local_state())) | 318 if (!signed_settings_cache::Store(data, g_browser_process->local_state())) |
301 LOG(ERROR) << "Couldn't store to the temp storage."; | 319 LOG(ERROR) << "Couldn't store to the temp storage."; |
302 | 320 |
303 if (ownership_status_ == OwnershipService::OWNERSHIP_TAKEN) { | 321 if (ownership_status_ == OwnershipService::OWNERSHIP_TAKEN) { |
304 em::PolicyFetchResponse policy_envelope; | 322 em::PolicyFetchResponse policy_envelope; |
305 policy_envelope.set_policy_data(policy_.SerializeAsString()); | 323 policy_envelope.set_policy_data(policy_.SerializeAsString()); |
306 SignedSettingsHelper::Get()->StartStorePolicyOp( | 324 signed_settings_helper_->StartStorePolicyOp( |
307 policy_envelope, | 325 policy_envelope, |
308 base::Bind(&DeviceSettingsProvider::OnStorePolicyCompleted, | 326 base::Bind(&DeviceSettingsProvider::OnStorePolicyCompleted, |
309 base::Unretained(this))); | 327 base::Unretained(this))); |
310 } else { | 328 } else { |
311 // OnStorePolicyCompleted won't get called in this case so proceed with any | 329 // OnStorePolicyCompleted won't get called in this case so proceed with any |
312 // pending operations immediately. | 330 // pending operations immediately. |
313 delete pending_changes_[0].second; | 331 delete pending_changes_[0].second; |
314 pending_changes_.erase(pending_changes_.begin()); | 332 pending_changes_.erase(pending_changes_.begin()); |
315 if (!pending_changes_.empty()) | 333 if (!pending_changes_.empty()) |
316 SetInPolicy(); | 334 SetInPolicy(); |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 Reload(); | 740 Reload(); |
723 return; | 741 return; |
724 } | 742 } |
725 LOG(ERROR) << "No retries left"; | 743 LOG(ERROR) << "No retries left"; |
726 break; | 744 break; |
727 } | 745 } |
728 } | 746 } |
729 } | 747 } |
730 | 748 |
731 } // namespace chromeos | 749 } // namespace chromeos |
OLD | NEW |