| OLD | NEW |
| 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/managed_mode/managed_user_sync_service.h" | 5 #include "chrome/browser/managed_mode/managed_user_sync_service.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/prefs/scoped_user_pref_update.h" | 9 #include "base/prefs/scoped_user_pref_update.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 if (!chromeos_avatar.empty()) | 55 if (!chromeos_avatar.empty()) |
| 56 specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar); | 56 specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar); |
| 57 if (!master_key.empty()) | 57 if (!master_key.empty()) |
| 58 specifics.mutable_managed_user()->set_master_key(master_key); | 58 specifics.mutable_managed_user()->set_master_key(master_key); |
| 59 if (acknowledged) | 59 if (acknowledged) |
| 60 specifics.mutable_managed_user()->set_acknowledged(true); | 60 specifics.mutable_managed_user()->set_acknowledged(true); |
| 61 return SyncData::CreateLocalData(id, name, specifics); | 61 return SyncData::CreateLocalData(id, name, specifics); |
| 62 } | 62 } |
| 63 | 63 |
| 64 SyncData CreateSyncDataFromDictionaryEntry( | 64 SyncData CreateSyncDataFromDictionaryEntry( |
| 65 const DictionaryValue::Iterator& it) { | 65 const base::DictionaryValue::Iterator& it) { |
| 66 const DictionaryValue* dict = NULL; | 66 const base::DictionaryValue* dict = NULL; |
| 67 bool success = it.value().GetAsDictionary(&dict); | 67 bool success = it.value().GetAsDictionary(&dict); |
| 68 DCHECK(success); | 68 DCHECK(success); |
| 69 bool acknowledged = false; | 69 bool acknowledged = false; |
| 70 dict->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged); | 70 dict->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged); |
| 71 std::string name; | 71 std::string name; |
| 72 dict->GetString(ManagedUserSyncService::kName, &name); | 72 dict->GetString(ManagedUserSyncService::kName, &name); |
| 73 DCHECK(!name.empty()); | 73 DCHECK(!name.empty()); |
| 74 std::string master_key; | 74 std::string master_key; |
| 75 dict->GetString(ManagedUserSyncService::kMasterKey, &master_key); | 75 dict->GetString(ManagedUserSyncService::kMasterKey, &master_key); |
| 76 std::string chrome_avatar; | 76 std::string chrome_avatar; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 void ManagedUserSyncService::RemoveObserver( | 150 void ManagedUserSyncService::RemoveObserver( |
| 151 ManagedUserSyncServiceObserver* observer) { | 151 ManagedUserSyncServiceObserver* observer) { |
| 152 observers_.RemoveObserver(observer); | 152 observers_.RemoveObserver(observer); |
| 153 } | 153 } |
| 154 | 154 |
| 155 void ManagedUserSyncService::AddManagedUser(const std::string& id, | 155 void ManagedUserSyncService::AddManagedUser(const std::string& id, |
| 156 const std::string& name, | 156 const std::string& name, |
| 157 const std::string& master_key, | 157 const std::string& master_key, |
| 158 int avatar_index) { | 158 int avatar_index) { |
| 159 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); | 159 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
| 160 DictionaryValue* dict = update.Get(); | 160 base::DictionaryValue* dict = update.Get(); |
| 161 DictionaryValue* value = new DictionaryValue; | 161 base::DictionaryValue* value = new base::DictionaryValue; |
| 162 value->SetString(kName, name); | 162 value->SetString(kName, name); |
| 163 value->SetString(kMasterKey, master_key); | 163 value->SetString(kMasterKey, master_key); |
| 164 std::string chrome_avatar; | 164 std::string chrome_avatar; |
| 165 std::string chromeos_avatar; | 165 std::string chromeos_avatar; |
| 166 #if defined(OS_CHROMEOS) | 166 #if defined(OS_CHROMEOS) |
| 167 chromeos_avatar = BuildAvatarString(avatar_index); | 167 chromeos_avatar = BuildAvatarString(avatar_index); |
| 168 #else | 168 #else |
| 169 chrome_avatar = BuildAvatarString(avatar_index); | 169 chrome_avatar = BuildAvatarString(avatar_index); |
| 170 #endif | 170 #endif |
| 171 value->SetString(kChromeAvatar, chrome_avatar); | 171 value->SetString(kChromeAvatar, chrome_avatar); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 199 SyncChangeList change_list; | 199 SyncChangeList change_list; |
| 200 change_list.push_back(SyncChange( | 200 change_list.push_back(SyncChange( |
| 201 FROM_HERE, | 201 FROM_HERE, |
| 202 SyncChange::ACTION_DELETE, | 202 SyncChange::ACTION_DELETE, |
| 203 SyncData::CreateLocalDelete(id, MANAGED_USERS))); | 203 SyncData::CreateLocalDelete(id, MANAGED_USERS))); |
| 204 SyncError sync_error = | 204 SyncError sync_error = |
| 205 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 205 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
| 206 DCHECK(!sync_error.IsSet()); | 206 DCHECK(!sync_error.IsSet()); |
| 207 } | 207 } |
| 208 | 208 |
| 209 const DictionaryValue* ManagedUserSyncService::GetManagedUsers() { | 209 const base::DictionaryValue* ManagedUserSyncService::GetManagedUsers() { |
| 210 DCHECK(sync_processor_); | 210 DCHECK(sync_processor_); |
| 211 return prefs_->GetDictionary(prefs::kManagedUsers); | 211 return prefs_->GetDictionary(prefs::kManagedUsers); |
| 212 } | 212 } |
| 213 | 213 |
| 214 bool ManagedUserSyncService::UpdateManagedUserAvatarIfNeeded( | 214 bool ManagedUserSyncService::UpdateManagedUserAvatarIfNeeded( |
| 215 const std::string& id, | 215 const std::string& id, |
| 216 int avatar_index) { | 216 int avatar_index) { |
| 217 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); | 217 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
| 218 DictionaryValue* dict = update.Get(); | 218 base::DictionaryValue* dict = update.Get(); |
| 219 DCHECK(dict->HasKey(id)); | 219 DCHECK(dict->HasKey(id)); |
| 220 DictionaryValue* value = NULL; | 220 base::DictionaryValue* value = NULL; |
| 221 bool success = dict->GetDictionaryWithoutPathExpansion(id, &value); | 221 bool success = dict->GetDictionaryWithoutPathExpansion(id, &value); |
| 222 DCHECK(success); | 222 DCHECK(success); |
| 223 | 223 |
| 224 bool acknowledged = false; | 224 bool acknowledged = false; |
| 225 value->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged); | 225 value->GetBoolean(ManagedUserSyncService::kAcknowledged, &acknowledged); |
| 226 std::string name; | 226 std::string name; |
| 227 value->GetString(ManagedUserSyncService::kName, &name); | 227 value->GetString(ManagedUserSyncService::kName, &name); |
| 228 std::string master_key; | 228 std::string master_key; |
| 229 value->GetString(ManagedUserSyncService::kMasterKey, &master_key); | 229 value->GetString(ManagedUserSyncService::kMasterKey, &master_key); |
| 230 std::string chromeos_avatar; | 230 std::string chromeos_avatar; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 scoped_ptr<SyncChangeProcessor> sync_processor, | 293 scoped_ptr<SyncChangeProcessor> sync_processor, |
| 294 scoped_ptr<SyncErrorFactory> error_handler) { | 294 scoped_ptr<SyncErrorFactory> error_handler) { |
| 295 DCHECK_EQ(MANAGED_USERS, type); | 295 DCHECK_EQ(MANAGED_USERS, type); |
| 296 sync_processor_ = sync_processor.Pass(); | 296 sync_processor_ = sync_processor.Pass(); |
| 297 error_handler_ = error_handler.Pass(); | 297 error_handler_ = error_handler.Pass(); |
| 298 | 298 |
| 299 SyncChangeList change_list; | 299 SyncChangeList change_list; |
| 300 SyncMergeResult result(MANAGED_USERS); | 300 SyncMergeResult result(MANAGED_USERS); |
| 301 | 301 |
| 302 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); | 302 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
| 303 DictionaryValue* dict = update.Get(); | 303 base::DictionaryValue* dict = update.Get(); |
| 304 result.set_num_items_before_association(dict->size()); | 304 result.set_num_items_before_association(dict->size()); |
| 305 std::set<std::string> seen_ids; | 305 std::set<std::string> seen_ids; |
| 306 int num_items_added = 0; | 306 int num_items_added = 0; |
| 307 int num_items_modified = 0; | 307 int num_items_modified = 0; |
| 308 for (SyncDataList::const_iterator it = initial_sync_data.begin(); | 308 for (SyncDataList::const_iterator it = initial_sync_data.begin(); |
| 309 it != initial_sync_data.end(); ++it) { | 309 it != initial_sync_data.end(); ++it) { |
| 310 DCHECK_EQ(MANAGED_USERS, it->GetDataType()); | 310 DCHECK_EQ(MANAGED_USERS, it->GetDataType()); |
| 311 const ManagedUserSpecifics& managed_user = | 311 const ManagedUserSpecifics& managed_user = |
| 312 it->GetSpecifics().managed_user(); | 312 it->GetSpecifics().managed_user(); |
| 313 DictionaryValue* value = new DictionaryValue(); | 313 base::DictionaryValue* value = new base::DictionaryValue(); |
| 314 value->SetString(kName, managed_user.name()); | 314 value->SetString(kName, managed_user.name()); |
| 315 value->SetBoolean(kAcknowledged, managed_user.acknowledged()); | 315 value->SetBoolean(kAcknowledged, managed_user.acknowledged()); |
| 316 value->SetString(kMasterKey, managed_user.master_key()); | 316 value->SetString(kMasterKey, managed_user.master_key()); |
| 317 value->SetString(kChromeAvatar, managed_user.chrome_avatar()); | 317 value->SetString(kChromeAvatar, managed_user.chrome_avatar()); |
| 318 value->SetString(kChromeOsAvatar, managed_user.chromeos_avatar()); | 318 value->SetString(kChromeOsAvatar, managed_user.chromeos_avatar()); |
| 319 if (dict->HasKey(managed_user.id())) | 319 if (dict->HasKey(managed_user.id())) |
| 320 num_items_modified++; | 320 num_items_modified++; |
| 321 else | 321 else |
| 322 num_items_added++; | 322 num_items_added++; |
| 323 dict->SetWithoutPathExpansion(managed_user.id(), value); | 323 dict->SetWithoutPathExpansion(managed_user.id(), value); |
| 324 seen_ids.insert(managed_user.id()); | 324 seen_ids.insert(managed_user.id()); |
| 325 } | 325 } |
| 326 | 326 |
| 327 for (DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { | 327 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { |
| 328 if (seen_ids.find(it.key()) != seen_ids.end()) | 328 if (seen_ids.find(it.key()) != seen_ids.end()) |
| 329 continue; | 329 continue; |
| 330 | 330 |
| 331 change_list.push_back(SyncChange(FROM_HERE, SyncChange::ACTION_ADD, | 331 change_list.push_back(SyncChange(FROM_HERE, SyncChange::ACTION_ADD, |
| 332 CreateSyncDataFromDictionaryEntry(it))); | 332 CreateSyncDataFromDictionaryEntry(it))); |
| 333 } | 333 } |
| 334 result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); | 334 result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); |
| 335 | 335 |
| 336 result.set_num_items_modified(num_items_modified); | 336 result.set_num_items_modified(num_items_modified); |
| 337 result.set_num_items_added(num_items_added); | 337 result.set_num_items_added(num_items_added); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 348 // resetting the |sync_processor_|. | 348 // resetting the |sync_processor_|. |
| 349 NotifyManagedUsersSyncingStopped(); | 349 NotifyManagedUsersSyncingStopped(); |
| 350 sync_processor_.reset(); | 350 sync_processor_.reset(); |
| 351 error_handler_.reset(); | 351 error_handler_.reset(); |
| 352 } | 352 } |
| 353 | 353 |
| 354 SyncDataList ManagedUserSyncService::GetAllSyncData( | 354 SyncDataList ManagedUserSyncService::GetAllSyncData( |
| 355 ModelType type) const { | 355 ModelType type) const { |
| 356 SyncDataList data; | 356 SyncDataList data; |
| 357 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); | 357 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
| 358 DictionaryValue* dict = update.Get(); | 358 base::DictionaryValue* dict = update.Get(); |
| 359 for (DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) | 359 for (base::DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) |
| 360 data.push_back(CreateSyncDataFromDictionaryEntry(it)); | 360 data.push_back(CreateSyncDataFromDictionaryEntry(it)); |
| 361 | 361 |
| 362 return data; | 362 return data; |
| 363 } | 363 } |
| 364 | 364 |
| 365 SyncError ManagedUserSyncService::ProcessSyncChanges( | 365 SyncError ManagedUserSyncService::ProcessSyncChanges( |
| 366 const tracked_objects::Location& from_here, | 366 const tracked_objects::Location& from_here, |
| 367 const SyncChangeList& change_list) { | 367 const SyncChangeList& change_list) { |
| 368 SyncError error; | 368 SyncError error; |
| 369 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); | 369 DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); |
| 370 DictionaryValue* dict = update.Get(); | 370 base::DictionaryValue* dict = update.Get(); |
| 371 for (SyncChangeList::const_iterator it = change_list.begin(); | 371 for (SyncChangeList::const_iterator it = change_list.begin(); |
| 372 it != change_list.end(); ++it) { | 372 it != change_list.end(); ++it) { |
| 373 SyncData data = it->sync_data(); | 373 SyncData data = it->sync_data(); |
| 374 DCHECK_EQ(MANAGED_USERS, data.GetDataType()); | 374 DCHECK_EQ(MANAGED_USERS, data.GetDataType()); |
| 375 const ManagedUserSpecifics& managed_user = | 375 const ManagedUserSpecifics& managed_user = |
| 376 data.GetSpecifics().managed_user(); | 376 data.GetSpecifics().managed_user(); |
| 377 switch (it->change_type()) { | 377 switch (it->change_type()) { |
| 378 case SyncChange::ACTION_ADD: | 378 case SyncChange::ACTION_ADD: |
| 379 case SyncChange::ACTION_UPDATE: { | 379 case SyncChange::ACTION_UPDATE: { |
| 380 // Every item we get from the server should be acknowledged. | 380 // Every item we get from the server should be acknowledged. |
| 381 DCHECK(managed_user.acknowledged()); | 381 DCHECK(managed_user.acknowledged()); |
| 382 const DictionaryValue* old_value = NULL; | 382 const base::DictionaryValue* old_value = NULL; |
| 383 dict->GetDictionaryWithoutPathExpansion(managed_user.id(), &old_value); | 383 dict->GetDictionaryWithoutPathExpansion(managed_user.id(), &old_value); |
| 384 | 384 |
| 385 // For an update action, the managed user should already exist, for an | 385 // For an update action, the managed user should already exist, for an |
| 386 // add action, it should not. | 386 // add action, it should not. |
| 387 DCHECK_EQ( | 387 DCHECK_EQ( |
| 388 old_value ? SyncChange::ACTION_UPDATE : SyncChange::ACTION_ADD, | 388 old_value ? SyncChange::ACTION_UPDATE : SyncChange::ACTION_ADD, |
| 389 it->change_type()); | 389 it->change_type()); |
| 390 | 390 |
| 391 // If the managed user switched from unacknowledged to acknowledged, | 391 // If the managed user switched from unacknowledged to acknowledged, |
| 392 // we might need to continue with a registration. | 392 // we might need to continue with a registration. |
| 393 if (old_value && !old_value->HasKey(kAcknowledged)) | 393 if (old_value && !old_value->HasKey(kAcknowledged)) |
| 394 NotifyManagedUserAcknowledged(managed_user.id()); | 394 NotifyManagedUserAcknowledged(managed_user.id()); |
| 395 | 395 |
| 396 DictionaryValue* value = new DictionaryValue; | 396 base::DictionaryValue* value = new base::DictionaryValue; |
| 397 value->SetString(kName, managed_user.name()); | 397 value->SetString(kName, managed_user.name()); |
| 398 value->SetBoolean(kAcknowledged, managed_user.acknowledged()); | 398 value->SetBoolean(kAcknowledged, managed_user.acknowledged()); |
| 399 value->SetString(kMasterKey, managed_user.master_key()); | 399 value->SetString(kMasterKey, managed_user.master_key()); |
| 400 value->SetString(kChromeAvatar, managed_user.chrome_avatar()); | 400 value->SetString(kChromeAvatar, managed_user.chrome_avatar()); |
| 401 value->SetString(kChromeOsAvatar, managed_user.chromeos_avatar()); | 401 value->SetString(kChromeOsAvatar, managed_user.chromeos_avatar()); |
| 402 dict->SetWithoutPathExpansion(managed_user.id(), value); | 402 dict->SetWithoutPathExpansion(managed_user.id(), value); |
| 403 break; | 403 break; |
| 404 } | 404 } |
| 405 case SyncChange::ACTION_DELETE: { | 405 case SyncChange::ACTION_DELETE: { |
| 406 DCHECK(dict->HasKey(managed_user.id())) << managed_user.id(); | 406 DCHECK(dict->HasKey(managed_user.id())) << managed_user.id(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 429 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, | 429 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, |
| 430 OnManagedUserAcknowledged(managed_user_id)); | 430 OnManagedUserAcknowledged(managed_user_id)); |
| 431 } | 431 } |
| 432 | 432 |
| 433 void ManagedUserSyncService::NotifyManagedUsersSyncingStopped() { | 433 void ManagedUserSyncService::NotifyManagedUsersSyncingStopped() { |
| 434 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, | 434 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, |
| 435 OnManagedUsersSyncingStopped()); | 435 OnManagedUsersSyncingStopped()); |
| 436 } | 436 } |
| 437 | 437 |
| 438 void ManagedUserSyncService::DispatchCallbacks() { | 438 void ManagedUserSyncService::DispatchCallbacks() { |
| 439 const DictionaryValue* managed_users = | 439 const base::DictionaryValue* managed_users = |
| 440 prefs_->GetDictionary(prefs::kManagedUsers); | 440 prefs_->GetDictionary(prefs::kManagedUsers); |
| 441 for (std::vector<ManagedUsersCallback>::iterator it = callbacks_.begin(); | 441 for (std::vector<ManagedUsersCallback>::iterator it = callbacks_.begin(); |
| 442 it != callbacks_.end(); ++it) { | 442 it != callbacks_.end(); ++it) { |
| 443 it->Run(managed_users); | 443 it->Run(managed_users); |
| 444 } | 444 } |
| 445 callbacks_.clear(); | 445 callbacks_.clear(); |
| 446 } | 446 } |
| OLD | NEW |