Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Side by Side Diff: chrome/browser/chromeos/policy/cloud_external_data_policy_observer.cc

Issue 1940153002: Use std::unique_ptr to express ownership of base::Value in PolicyMap::Entry (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: another-fix Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/policy/cloud_external_data_policy_observer.h" 5 #include "chrome/browser/chromeos/policy/cloud_external_data_policy_observer.h"
6 6
7 #include <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 140
141 device_local_accounts_subscription_ = cros_settings_->AddSettingsObserver( 141 device_local_accounts_subscription_ = cros_settings_->AddSettingsObserver(
142 chromeos::kAccountsPrefDeviceLocalAccounts, 142 chromeos::kAccountsPrefDeviceLocalAccounts,
143 base::Bind(&CloudExternalDataPolicyObserver::RetrieveDeviceLocalAccounts, 143 base::Bind(&CloudExternalDataPolicyObserver::RetrieveDeviceLocalAccounts,
144 base::Unretained(this))); 144 base::Unretained(this)));
145 } 145 }
146 146
147 CloudExternalDataPolicyObserver::~CloudExternalDataPolicyObserver() { 147 CloudExternalDataPolicyObserver::~CloudExternalDataPolicyObserver() {
148 if (device_local_account_policy_service_) 148 if (device_local_account_policy_service_)
149 device_local_account_policy_service_->RemoveObserver(this); 149 device_local_account_policy_service_->RemoveObserver(this);
150 for (DeviceLocalAccountEntryMap::iterator it =
151 device_local_account_entries_.begin();
152 it != device_local_account_entries_.end(); ++it) {
153 it->second.DeleteOwnedMembers();
154 }
155 device_local_account_entries_.clear(); 150 device_local_account_entries_.clear();
156 } 151 }
157 152
158 void CloudExternalDataPolicyObserver::Init() { 153 void CloudExternalDataPolicyObserver::Init() {
159 RetrieveDeviceLocalAccounts(); 154 RetrieveDeviceLocalAccounts();
160 } 155 }
161 156
162 void CloudExternalDataPolicyObserver::Observe( 157 void CloudExternalDataPolicyObserver::Observe(
163 int type, 158 int type,
164 const content::NotificationSource& source, 159 const content::NotificationSource& source,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 // finds out about |user_id| and creates a |broker| for it. 209 // finds out about |user_id| and creates a |broker| for it.
215 return; 210 return;
216 } 211 }
217 212
218 const PolicyMap::Entry* entry = 213 const PolicyMap::Entry* entry =
219 broker->core()->store()->policy_map().Get(policy_); 214 broker->core()->store()->policy_map().Get(policy_);
220 if (!entry) { 215 if (!entry) {
221 DeviceLocalAccountEntryMap::iterator it = 216 DeviceLocalAccountEntryMap::iterator it =
222 device_local_account_entries_.find(user_id); 217 device_local_account_entries_.find(user_id);
223 if (it != device_local_account_entries_.end()) { 218 if (it != device_local_account_entries_.end()) {
224 it->second.DeleteOwnedMembers();
225 device_local_account_entries_.erase(it); 219 device_local_account_entries_.erase(it);
226 HandleExternalDataPolicyUpdate(user_id, NULL); 220 HandleExternalDataPolicyUpdate(user_id, NULL);
227 } 221 }
228 return; 222 return;
229 } 223 }
230 224
231 PolicyMap::Entry& map_entry = device_local_account_entries_[user_id]; 225 PolicyMap::Entry& map_entry = device_local_account_entries_[user_id];
232 if (map_entry.Equals(*entry)) 226 if (map_entry.Equals(*entry))
233 return; 227 return;
234 228
235 map_entry.DeleteOwnedMembers(); 229 map_entry = entry->DeepCopy();
236 map_entry = *entry->DeepCopy();
237 HandleExternalDataPolicyUpdate(user_id, entry); 230 HandleExternalDataPolicyUpdate(user_id, entry);
238 } 231 }
239 232
240 void CloudExternalDataPolicyObserver::OnDeviceLocalAccountsChanged() { 233 void CloudExternalDataPolicyObserver::OnDeviceLocalAccountsChanged() {
241 // No action needed here, changes to the list of device-local accounts get 234 // No action needed here, changes to the list of device-local accounts get
242 // handled via the kAccountsPrefDeviceLocalAccounts device setting observer. 235 // handled via the kAccountsPrefDeviceLocalAccounts device setting observer.
243 } 236 }
244 237
245 void CloudExternalDataPolicyObserver::RetrieveDeviceLocalAccounts() { 238 void CloudExternalDataPolicyObserver::RetrieveDeviceLocalAccounts() {
246 // Schedule a callback if device policy has not yet been verified. 239 // Schedule a callback if device policy has not yet been verified.
(...skipping 11 matching lines...) Expand all
258 device_local_account_list.begin(); 251 device_local_account_list.begin();
259 it != device_local_account_list.end(); ++it) { 252 it != device_local_account_list.end(); ++it) {
260 device_local_accounts.insert(it->user_id); 253 device_local_accounts.insert(it->user_id);
261 } 254 }
262 255
263 for (DeviceLocalAccountEntryMap::iterator it = 256 for (DeviceLocalAccountEntryMap::iterator it =
264 device_local_account_entries_.begin(); 257 device_local_account_entries_.begin();
265 it != device_local_account_entries_.end(); ) { 258 it != device_local_account_entries_.end(); ) {
266 if (!ContainsKey(device_local_accounts, it->first)) { 259 if (!ContainsKey(device_local_accounts, it->first)) {
267 const std::string user_id = it->first; 260 const std::string user_id = it->first;
268 it->second.DeleteOwnedMembers();
269 device_local_account_entries_.erase(it++); 261 device_local_account_entries_.erase(it++);
270 // When a device-local account whose external data reference was set is 262 // When a device-local account whose external data reference was set is
271 // removed, emit a notification that the external data reference has been 263 // removed, emit a notification that the external data reference has been
272 // cleared. 264 // cleared.
273 HandleExternalDataPolicyUpdate(user_id, NULL); 265 HandleExternalDataPolicyUpdate(user_id, NULL);
274 } else { 266 } else {
275 ++it; 267 ++it;
276 } 268 }
277 } 269 }
278 270
(...skipping 29 matching lines...) Expand all
308 void CloudExternalDataPolicyObserver::OnExternalDataFetched( 300 void CloudExternalDataPolicyObserver::OnExternalDataFetched(
309 const std::string& user_id, 301 const std::string& user_id,
310 std::unique_ptr<std::string> data) { 302 std::unique_ptr<std::string> data) {
311 FetchWeakPtrMap::iterator it = fetch_weak_ptrs_.find(user_id); 303 FetchWeakPtrMap::iterator it = fetch_weak_ptrs_.find(user_id);
312 DCHECK(it != fetch_weak_ptrs_.end()); 304 DCHECK(it != fetch_weak_ptrs_.end());
313 fetch_weak_ptrs_.erase(it); 305 fetch_weak_ptrs_.erase(it);
314 delegate_->OnExternalDataFetched(policy_, user_id, std::move(data)); 306 delegate_->OnExternalDataFetched(policy_, user_id, std::move(data));
315 } 307 }
316 308
317 } // namespace policy 309 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698