Commit b6c626e5 authored by ibraaaa@chromium.org's avatar ibraaaa@chromium.org

Avatar syncing for supervised users

Syncs the avatar of the supervised user selected during its creation process but doesn't sync any further changes.

TBR=nkostylev@chromium.org

BUG=278083

Review URL: https://chromiumcodereview.appspot.com/23653007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@222019 0039d316-1c4b-4281-b951-d872f2087c98
parent 63bcb55f
...@@ -29,6 +29,7 @@ namespace chromeos { ...@@ -29,6 +29,7 @@ namespace chromeos {
namespace { namespace {
const int kDummyAvatarIndex = -111;
const int kMasterKeySize = 32; const int kMasterKeySize = 32;
const int kUserCreationTimeoutSeconds = 60; // 60 seconds. const int kUserCreationTimeoutSeconds = 60; // 60 seconds.
...@@ -160,7 +161,8 @@ void LocallyManagedUserCreationController::OnAddKeySuccess() { ...@@ -160,7 +161,8 @@ void LocallyManagedUserCreationController::OnAddKeySuccess() {
creation_context_->manager_profile); creation_context_->manager_profile);
VLOG(1) << "Creating user on server"; VLOG(1) << "Creating user on server";
ManagedUserRegistrationInfo info(creation_context_->display_name); ManagedUserRegistrationInfo info(creation_context_->display_name,
kDummyAvatarIndex);
info.master_key = creation_context_->master_key; info.master_key = creation_context_->master_key;
creation_context_->registration_utility->Register( creation_context_->registration_utility->Register(
creation_context_->sync_user_id, creation_context_->sync_user_id,
......
...@@ -107,8 +107,10 @@ class ManagedUserRegistrationUtilityImpl ...@@ -107,8 +107,10 @@ class ManagedUserRegistrationUtilityImpl
} // namespace } // namespace
ManagedUserRegistrationInfo::ManagedUserRegistrationInfo(const string16& name) ManagedUserRegistrationInfo::ManagedUserRegistrationInfo(const string16& name,
: name(name) { int avatar_index)
: avatar_index(avatar_index),
name(name) {
} }
ScopedTestingManagedUserRegistrationUtility:: ScopedTestingManagedUserRegistrationUtility::
...@@ -202,7 +204,8 @@ void ManagedUserRegistrationUtilityImpl::Register( ...@@ -202,7 +204,8 @@ void ManagedUserRegistrationUtilityImpl::Register(
if (!is_existing_managed_user_) { if (!is_existing_managed_user_) {
managed_user_sync_service_->AddManagedUser(pending_managed_user_id_, managed_user_sync_service_->AddManagedUser(pending_managed_user_id_,
base::UTF16ToUTF8(info.name), base::UTF16ToUTF8(info.name),
info.master_key); info.master_key,
info.avatar_index);
} else { } else {
// User already exists, don't wait for acknowledgment. // User already exists, don't wait for acknowledgment.
OnManagedUserAcknowledged(managed_user_id); OnManagedUserAcknowledged(managed_user_id);
......
...@@ -31,7 +31,8 @@ class DeviceInfo; ...@@ -31,7 +31,8 @@ class DeviceInfo;
// Structure to store registration information. // Structure to store registration information.
struct ManagedUserRegistrationInfo { struct ManagedUserRegistrationInfo {
explicit ManagedUserRegistrationInfo(const string16& name); ManagedUserRegistrationInfo(const string16& name, int avatar_index);
int avatar_index;
string16 name; string16 name;
std::string master_key; std::string master_key;
}; };
......
...@@ -231,7 +231,7 @@ TEST_F(ManagedUserRegistrationUtilityTest, Register) { ...@@ -231,7 +231,7 @@ TEST_F(ManagedUserRegistrationUtilityTest, Register) {
StartInitialSync(); StartInitialSync();
GetRegistrationUtility()->Register( GetRegistrationUtility()->Register(
ManagedUserRegistrationUtility::GenerateNewManagedUserId(), ManagedUserRegistrationUtility::GenerateNewManagedUserId(),
ManagedUserRegistrationInfo(ASCIIToUTF16("Dug")), ManagedUserRegistrationInfo(ASCIIToUTF16("Dug"), 0),
GetRegistrationCallback()); GetRegistrationCallback());
EXPECT_EQ(1u, prefs()->GetDictionary(prefs::kManagedUsers)->size()); EXPECT_EQ(1u, prefs()->GetDictionary(prefs::kManagedUsers)->size());
Acknowledge(); Acknowledge();
...@@ -244,7 +244,7 @@ TEST_F(ManagedUserRegistrationUtilityTest, Register) { ...@@ -244,7 +244,7 @@ TEST_F(ManagedUserRegistrationUtilityTest, Register) {
TEST_F(ManagedUserRegistrationUtilityTest, RegisterBeforeInitialSync) { TEST_F(ManagedUserRegistrationUtilityTest, RegisterBeforeInitialSync) {
GetRegistrationUtility()->Register( GetRegistrationUtility()->Register(
ManagedUserRegistrationUtility::GenerateNewManagedUserId(), ManagedUserRegistrationUtility::GenerateNewManagedUserId(),
ManagedUserRegistrationInfo(ASCIIToUTF16("Nemo")), ManagedUserRegistrationInfo(ASCIIToUTF16("Nemo"), 5),
GetRegistrationCallback()); GetRegistrationCallback());
EXPECT_EQ(1u, prefs()->GetDictionary(prefs::kManagedUsers)->size()); EXPECT_EQ(1u, prefs()->GetDictionary(prefs::kManagedUsers)->size());
StartInitialSync(); StartInitialSync();
...@@ -259,7 +259,7 @@ TEST_F(ManagedUserRegistrationUtilityTest, SyncServiceShutdownBeforeRegFinish) { ...@@ -259,7 +259,7 @@ TEST_F(ManagedUserRegistrationUtilityTest, SyncServiceShutdownBeforeRegFinish) {
StartInitialSync(); StartInitialSync();
GetRegistrationUtility()->Register( GetRegistrationUtility()->Register(
ManagedUserRegistrationUtility::GenerateNewManagedUserId(), ManagedUserRegistrationUtility::GenerateNewManagedUserId(),
ManagedUserRegistrationInfo(ASCIIToUTF16("Remy")), ManagedUserRegistrationInfo(ASCIIToUTF16("Remy"), 12),
GetRegistrationCallback()); GetRegistrationCallback());
EXPECT_EQ(1u, prefs()->GetDictionary(prefs::kManagedUsers)->size()); EXPECT_EQ(1u, prefs()->GetDictionary(prefs::kManagedUsers)->size());
service()->Shutdown(); service()->Shutdown();
...@@ -273,7 +273,7 @@ TEST_F(ManagedUserRegistrationUtilityTest, StopSyncingBeforeRegFinish) { ...@@ -273,7 +273,7 @@ TEST_F(ManagedUserRegistrationUtilityTest, StopSyncingBeforeRegFinish) {
StartInitialSync(); StartInitialSync();
GetRegistrationUtility()->Register( GetRegistrationUtility()->Register(
ManagedUserRegistrationUtility::GenerateNewManagedUserId(), ManagedUserRegistrationUtility::GenerateNewManagedUserId(),
ManagedUserRegistrationInfo(ASCIIToUTF16("Mike")), ManagedUserRegistrationInfo(ASCIIToUTF16("Mike"), 17),
GetRegistrationCallback()); GetRegistrationCallback());
EXPECT_EQ(1u, prefs()->GetDictionary(prefs::kManagedUsers)->size()); EXPECT_EQ(1u, prefs()->GetDictionary(prefs::kManagedUsers)->size());
service()->StopSyncing(MANAGED_USERS); service()->StopSyncing(MANAGED_USERS);
......
...@@ -637,7 +637,9 @@ void ManagedUserService::RegisterAndInitSync( ...@@ -637,7 +637,9 @@ void ManagedUserService::RegisterAndInitSync(
string16 name = UTF8ToUTF16( string16 name = UTF8ToUTF16(
profile_->GetPrefs()->GetString(prefs::kProfileName)); profile_->GetPrefs()->GetString(prefs::kProfileName));
ManagedUserRegistrationInfo info(name); int avatar_index = profile_->GetPrefs()->GetInteger(
prefs::kProfileAvatarIndex);
ManagedUserRegistrationInfo info(name, avatar_index);
registration_utility->Register( registration_utility->Register(
managed_user_id, managed_user_id,
info, info,
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/callback.h" #include "base/callback.h"
#include "base/strings/stringprintf.h"
#include "base/values.h" #include "base/values.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h" #include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -35,16 +36,24 @@ using sync_pb::ManagedUserSpecifics; ...@@ -35,16 +36,24 @@ using sync_pb::ManagedUserSpecifics;
namespace { namespace {
const char kAcknowledged[] = "acknowledged"; const char kAcknowledged[] = "acknowledged";
const char kChromeAvatar[] = "chromeAvatar";
const char kChromeOsAvatar[] = "chromeOsAvatar";
const char kName[] = "name"; const char kName[] = "name";
const char kMasterKey[] = "masterKey"; const char kMasterKey[] = "masterKey";
SyncData CreateLocalSyncData(const std::string& id, SyncData CreateLocalSyncData(const std::string& id,
const std::string& name, const std::string& name,
bool acknowledged, bool acknowledged,
const std::string& master_key) { const std::string& master_key,
const std::string& chrome_avatar,
const std::string& chromeos_avatar) {
::sync_pb::EntitySpecifics specifics; ::sync_pb::EntitySpecifics specifics;
specifics.mutable_managed_user()->set_id(id); specifics.mutable_managed_user()->set_id(id);
specifics.mutable_managed_user()->set_name(name); specifics.mutable_managed_user()->set_name(name);
if (!chrome_avatar.empty())
specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar);
if (!chromeos_avatar.empty())
specifics.mutable_managed_user()->set_chromeos_avatar(chromeos_avatar);
if (!master_key.empty()) if (!master_key.empty())
specifics.mutable_managed_user()->set_master_key(master_key); specifics.mutable_managed_user()->set_master_key(master_key);
if (acknowledged) if (acknowledged)
...@@ -52,6 +61,27 @@ SyncData CreateLocalSyncData(const std::string& id, ...@@ -52,6 +61,27 @@ SyncData CreateLocalSyncData(const std::string& id,
return SyncData::CreateLocalData(id, name, specifics); return SyncData::CreateLocalData(id, name, specifics);
} }
SyncData CreateSyncDataFromDictionaryEntry(
const DictionaryValue::Iterator& it) {
const DictionaryValue* dict = NULL;
bool success = it.value().GetAsDictionary(&dict);
DCHECK(success);
bool acknowledged = false;
dict->GetBoolean(kAcknowledged, &acknowledged);
std::string name;
dict->GetString(kName, &name);
DCHECK(!name.empty());
std::string master_key;
dict->GetString(kMasterKey, &master_key);
std::string chrome_avatar;
dict->GetString(kChromeAvatar, &chrome_avatar);
std::string chromeos_avatar;
dict->GetString(kChromeOsAvatar, &chromeos_avatar);
return CreateLocalSyncData(it.key(), name, acknowledged, master_key,
chrome_avatar, chromeos_avatar);
}
} // namespace } // namespace
ManagedUserSyncService::ManagedUserSyncService(PrefService* prefs) ManagedUserSyncService::ManagedUserSyncService(PrefService* prefs)
...@@ -85,12 +115,27 @@ void ManagedUserSyncService::RemoveObserver( ...@@ -85,12 +115,27 @@ void ManagedUserSyncService::RemoveObserver(
void ManagedUserSyncService::AddManagedUser(const std::string& id, void ManagedUserSyncService::AddManagedUser(const std::string& id,
const std::string& name, const std::string& name,
const std::string& master_key) { const std::string& master_key,
int avatar_index) {
DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers);
DictionaryValue* dict = update.Get(); DictionaryValue* dict = update.Get();
DictionaryValue* value = new DictionaryValue; DictionaryValue* value = new DictionaryValue;
value->SetString(kName, name); value->SetString(kName, name);
value->SetString(kMasterKey, master_key); value->SetString(kMasterKey, master_key);
std::string chrome_avatar;
#if defined(CHROME_OS)
// This is a dummy value that is passed when a supervised user is created on
// Chrome OS.
// TODO(ibraaaa): update this to use the correct avatar index
// once avatar syncing for supervised users is implemented on Chrome OS.
DCHECK_EQ(avatar_index, -111);
#else
chrome_avatar = base::StringPrintf("chrome-avatar-index:%d", avatar_index);
#endif
value->SetString(kChromeAvatar, chrome_avatar);
// TODO(ibraaaa): this should be updated to allow supervised
// users avatar syncing on Chrome OS.
value->SetString(kChromeOsAvatar, std::string());
DCHECK(!dict->HasKey(id)); DCHECK(!dict->HasKey(id));
dict->SetWithoutPathExpansion(id, value); dict->SetWithoutPathExpansion(id, value);
...@@ -102,7 +147,8 @@ void ManagedUserSyncService::AddManagedUser(const std::string& id, ...@@ -102,7 +147,8 @@ void ManagedUserSyncService::AddManagedUser(const std::string& id,
change_list.push_back(SyncChange( change_list.push_back(SyncChange(
FROM_HERE, FROM_HERE,
SyncChange::ACTION_ADD, SyncChange::ACTION_ADD,
CreateLocalSyncData(id, name, false, master_key))); CreateLocalSyncData(id, name, false, master_key,
chrome_avatar, std::string())));
SyncError error = SyncError error =
sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); sync_processor_->ProcessSyncChanges(FROM_HERE, change_list);
DCHECK(!error.IsSet()) << error.ToString(); DCHECK(!error.IsSet()) << error.ToString();
...@@ -170,6 +216,8 @@ SyncMergeResult ManagedUserSyncService::MergeDataAndStartSyncing( ...@@ -170,6 +216,8 @@ SyncMergeResult ManagedUserSyncService::MergeDataAndStartSyncing(
value->SetString(kName, managed_user.name()); value->SetString(kName, managed_user.name());
value->SetBoolean(kAcknowledged, managed_user.acknowledged()); value->SetBoolean(kAcknowledged, managed_user.acknowledged());
value->SetString(kMasterKey, managed_user.master_key()); value->SetString(kMasterKey, managed_user.master_key());
value->SetString(kChromeAvatar, managed_user.chrome_avatar());
value->SetString(kChromeOsAvatar, managed_user.chromeos_avatar());
if (dict->HasKey(managed_user.id())) if (dict->HasKey(managed_user.id()))
num_items_modified++; num_items_modified++;
else else
...@@ -182,19 +230,8 @@ SyncMergeResult ManagedUserSyncService::MergeDataAndStartSyncing( ...@@ -182,19 +230,8 @@ SyncMergeResult ManagedUserSyncService::MergeDataAndStartSyncing(
if (seen_ids.find(it.key()) != seen_ids.end()) if (seen_ids.find(it.key()) != seen_ids.end())
continue; continue;
const DictionaryValue* dict = NULL; change_list.push_back(SyncChange(FROM_HERE, SyncChange::ACTION_ADD,
bool success = it.value().GetAsDictionary(&dict); CreateSyncDataFromDictionaryEntry(it)));
DCHECK(success);
bool acknowledged = false;
dict->GetBoolean(kAcknowledged, &acknowledged);
std::string name;
dict->GetString(kName, &name);
std::string master_key;
dict->GetString(kMasterKey, &master_key);
DCHECK(!name.empty());
change_list.push_back(
SyncChange(FROM_HERE, SyncChange::ACTION_ADD,
CreateLocalSyncData(it.key(), name, acknowledged, master_key)));
} }
result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list));
...@@ -221,19 +258,9 @@ SyncDataList ManagedUserSyncService::GetAllSyncData( ...@@ -221,19 +258,9 @@ SyncDataList ManagedUserSyncService::GetAllSyncData(
SyncDataList data; SyncDataList data;
DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers); DictionaryPrefUpdate update(prefs_, prefs::kManagedUsers);
DictionaryValue* dict = update.Get(); DictionaryValue* dict = update.Get();
for (DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance()) { for (DictionaryValue::Iterator it(*dict); !it.IsAtEnd(); it.Advance())
const DictionaryValue* dict = NULL; data.push_back(CreateSyncDataFromDictionaryEntry(it));
bool success = it.value().GetAsDictionary(&dict);
DCHECK(success);
std::string name;
dict->GetString(kName, &name);
std::string master_key;
dict->GetString(kMasterKey, &master_key);
bool acknowledged = false;
dict->GetBoolean(kAcknowledged, &acknowledged);
data.push_back(
CreateLocalSyncData(it.key(), name, acknowledged, master_key));
}
return data; return data;
} }
...@@ -272,6 +299,8 @@ SyncError ManagedUserSyncService::ProcessSyncChanges( ...@@ -272,6 +299,8 @@ SyncError ManagedUserSyncService::ProcessSyncChanges(
value->SetString(kName, managed_user.name()); value->SetString(kName, managed_user.name());
value->SetBoolean(kAcknowledged, managed_user.acknowledged()); value->SetBoolean(kAcknowledged, managed_user.acknowledged());
value->SetString(kMasterKey, managed_user.master_key()); value->SetString(kMasterKey, managed_user.master_key());
value->SetString(kChromeAvatar, managed_user.chrome_avatar());
value->SetString(kChromeOsAvatar, managed_user.chromeos_avatar());
dict->SetWithoutPathExpansion(managed_user.id(), value); dict->SetWithoutPathExpansion(managed_user.id(), value);
break; break;
} }
......
...@@ -42,7 +42,8 @@ class ManagedUserSyncService : public BrowserContextKeyedService, ...@@ -42,7 +42,8 @@ class ManagedUserSyncService : public BrowserContextKeyedService,
void AddManagedUser(const std::string& id, void AddManagedUser(const std::string& id,
const std::string& name, const std::string& name,
const std::string& master_key); const std::string& master_key,
int avatar_index);
void DeleteManagedUser(const std::string& id); void DeleteManagedUser(const std::string& id);
// Returns a dictionary containing all managed users managed by this // Returns a dictionary containing all managed users managed by this
......
...@@ -85,7 +85,9 @@ class ManagedUserSyncServiceTest : public ::testing::Test { ...@@ -85,7 +85,9 @@ class ManagedUserSyncServiceTest : public ::testing::Test {
protected: protected:
scoped_ptr<SyncChangeProcessor> CreateChangeProcessor(); scoped_ptr<SyncChangeProcessor> CreateChangeProcessor();
scoped_ptr<SyncErrorFactory> CreateErrorFactory(); scoped_ptr<SyncErrorFactory> CreateErrorFactory();
SyncData CreateRemoteData(const std::string& id, const std::string& name); SyncData CreateRemoteData(const std::string& id,
const std::string& name,
const std::string& avatar);
PrefService* prefs() { return profile_.GetPrefs(); } PrefService* prefs() { return profile_.GetPrefs(); }
ManagedUserSyncService* service() { return service_; } ManagedUserSyncService* service() { return service_; }
...@@ -124,11 +126,15 @@ ManagedUserSyncServiceTest::CreateErrorFactory() { ...@@ -124,11 +126,15 @@ ManagedUserSyncServiceTest::CreateErrorFactory() {
SyncData ManagedUserSyncServiceTest::CreateRemoteData( SyncData ManagedUserSyncServiceTest::CreateRemoteData(
const std::string& id, const std::string& id,
const std::string& name) { const std::string& name,
const std::string& chrome_avatar) {
::sync_pb::EntitySpecifics specifics; ::sync_pb::EntitySpecifics specifics;
specifics.mutable_managed_user()->set_id(id); specifics.mutable_managed_user()->set_id(id);
specifics.mutable_managed_user()->set_name(name); specifics.mutable_managed_user()->set_name(name);
specifics.mutable_managed_user()->set_acknowledged(true); specifics.mutable_managed_user()->set_acknowledged(true);
if (!chrome_avatar.empty())
specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar);
return SyncData::CreateRemoteData(++sync_data_id_, specifics, base::Time()); return SyncData::CreateRemoteData(++sync_data_id_, specifics, base::Time());
} }
...@@ -154,6 +160,7 @@ TEST_F(ManagedUserSyncServiceTest, MergeEmpty) { ...@@ -154,6 +160,7 @@ TEST_F(ManagedUserSyncServiceTest, MergeEmpty) {
TEST_F(ManagedUserSyncServiceTest, MergeExisting) { TEST_F(ManagedUserSyncServiceTest, MergeExisting) {
const char kNameKey[] = "name"; const char kNameKey[] = "name";
const char kAcknowledgedKey[] = "acknowledged"; const char kAcknowledgedKey[] = "acknowledged";
const char kChromeAvatarKey[] = "chromeAvatar";
const char kUserId1[] = "aaaaa"; const char kUserId1[] = "aaaaa";
const char kUserId2[] = "bbbbb"; const char kUserId2[] = "bbbbb";
...@@ -163,6 +170,10 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) { ...@@ -163,6 +170,10 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) {
const char kName2[] = "Buzz"; const char kName2[] = "Buzz";
const char kName3[] = "Crush"; const char kName3[] = "Crush";
const char kName4[] = "Dory"; const char kName4[] = "Dory";
const char kAvatar1[] = "";
const char kAvatar2[] = "chrome-avatar-index:0";
const char kAvatar3[] = "chrome-avatar-index:20";
const char kAvatar4[] = "";
{ {
DictionaryPrefUpdate update(prefs(), prefs::kManagedUsers); DictionaryPrefUpdate update(prefs(), prefs::kManagedUsers);
DictionaryValue* managed_users = update.Get(); DictionaryValue* managed_users = update.Get();
...@@ -180,9 +191,9 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) { ...@@ -180,9 +191,9 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) {
base::Bind(&GetManagedUsersCallback, &async_managed_users)); base::Bind(&GetManagedUsersCallback, &async_managed_users));
SyncDataList initial_sync_data; SyncDataList initial_sync_data;
initial_sync_data.push_back(CreateRemoteData(kUserId2, kName2)); initial_sync_data.push_back(CreateRemoteData(kUserId2, kName2, kAvatar2));
initial_sync_data.push_back(CreateRemoteData(kUserId3, kName3)); initial_sync_data.push_back(CreateRemoteData(kUserId3, kName3, kAvatar3));
initial_sync_data.push_back(CreateRemoteData(kUserId4, kName4)); initial_sync_data.push_back(CreateRemoteData(kUserId4, kName4, kAvatar4));
SyncMergeResult result = SyncMergeResult result =
service()->MergeDataAndStartSyncing(MANAGED_USERS, service()->MergeDataAndStartSyncing(MANAGED_USERS,
...@@ -211,6 +222,9 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) { ...@@ -211,6 +222,9 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) {
bool acknowledged = false; bool acknowledged = false;
EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged));
EXPECT_TRUE(acknowledged); EXPECT_TRUE(acknowledged);
std::string avatar;
EXPECT_TRUE(managed_user->GetString(kChromeAvatarKey, &avatar));
EXPECT_EQ(kAvatar2, avatar);
} }
{ {
const DictionaryValue* managed_user = NULL; const DictionaryValue* managed_user = NULL;
...@@ -222,6 +236,9 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) { ...@@ -222,6 +236,9 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) {
bool acknowledged = false; bool acknowledged = false;
EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged));
EXPECT_TRUE(acknowledged); EXPECT_TRUE(acknowledged);
std::string avatar;
EXPECT_TRUE(managed_user->GetString(kChromeAvatarKey, &avatar));
EXPECT_EQ(kAvatar3, avatar);
} }
{ {
const DictionaryValue* managed_user = NULL; const DictionaryValue* managed_user = NULL;
...@@ -233,6 +250,9 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) { ...@@ -233,6 +250,9 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) {
bool acknowledged = false; bool acknowledged = false;
EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged));
EXPECT_TRUE(acknowledged); EXPECT_TRUE(acknowledged);
std::string avatar;
EXPECT_TRUE(managed_user->GetString(kChromeAvatarKey, &avatar));
EXPECT_EQ(kAvatar4, avatar);
} }
EXPECT_EQ(1u, change_processor()->changes().size()); EXPECT_EQ(1u, change_processor()->changes().size());
...@@ -244,5 +264,6 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) { ...@@ -244,5 +264,6 @@ TEST_F(ManagedUserSyncServiceTest, MergeExisting) {
change.sync_data().GetSpecifics().managed_user(); change.sync_data().GetSpecifics().managed_user();
EXPECT_EQ(kName1, managed_user.name()); EXPECT_EQ(kName1, managed_user.name());
EXPECT_FALSE(managed_user.acknowledged()); EXPECT_FALSE(managed_user.acknowledged());
EXPECT_EQ(kAvatar1, managed_user.chrome_avatar());
} }
} }
...@@ -25,4 +25,12 @@ message ManagedUserSpecifics { ...@@ -25,4 +25,12 @@ message ManagedUserSpecifics {
optional bool acknowledged = 3 [default = false]; optional bool acknowledged = 3 [default = false];
// Master key for managed user cryptohome. // Master key for managed user cryptohome.
optional string master_key = 4; optional string master_key = 4;
// A string representing the index of the supervised user avatar on Chrome.
// It has the following format:
// "chrome-avatar-index:INDEX" where INDEX is an integer.
optional string chrome_avatar = 5;
// A string representing the index of the supervised user avatar on Chrome OS.
// It has the following format:
// "chromeos-avatar-index:INDEX" where INDEX is an integer.
optional string chromeos_avatar = 6;
} }
...@@ -492,6 +492,8 @@ base::DictionaryValue* ManagedUserSpecificsToValue( ...@@ -492,6 +492,8 @@ base::DictionaryValue* ManagedUserSpecificsToValue(
SET_STR(name); SET_STR(name);
SET_BOOL(acknowledged); SET_BOOL(acknowledged);
SET_STR(master_key); SET_STR(master_key);
SET_STR(chrome_avatar);
SET_STR(chromeos_avatar);
return value; return value;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment