Chromium Code Reviews| Index: chrome/browser/managed_mode/supervised_user_pref_mapping_service.cc |
| diff --git a/chrome/browser/managed_mode/supervised_user_pref_mapping_service.cc b/chrome/browser/managed_mode/supervised_user_pref_mapping_service.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5e8d2dbb7453340233feeabdfb3973b086afa6e6 |
| --- /dev/null |
| +++ b/chrome/browser/managed_mode/supervised_user_pref_mapping_service.cc |
| @@ -0,0 +1,91 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/managed_mode/supervised_user_pref_mapping_service.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/prefs/pref_service.h" |
| +#include "base/values.h" |
| +#include "chrome/browser/managed_mode/managed_user_constants.h" |
| +#include "chrome/browser/managed_mode/managed_user_shared_settings_service.h" |
| +#include "chrome/common/pref_names.h" |
| + |
| +namespace { |
| + |
| +const int kNoAvatar = -1; |
|
Bernhard Bauer
2014/02/07 09:54:24
Nit: const variables automatically get internal li
Adrian Kuegel
2014/02/07 10:24:47
Done.
|
| + |
| +} |
| + |
| +SupervisedUserPrefMappingService::SupervisedUserPrefMappingService( |
| + PrefService* prefs, |
| + ManagedUserSharedSettingsService* shared_settings) |
| + : prefs_(prefs), |
| + shared_settings_(shared_settings), |
| + managed_user_id_(prefs->GetString(prefs::kManagedUserId)), |
| + weak_ptr_factory_(this) {} |
| + |
| +SupervisedUserPrefMappingService::~SupervisedUserPrefMappingService() {} |
| + |
| +void SupervisedUserPrefMappingService::Init() { |
| + subscription_ = shared_settings_->Subscribe( |
| + base::Bind(&SupervisedUserPrefMappingService::OnSharedSettingChanged, |
| + weak_ptr_factory_.GetWeakPtr())); |
| + |
| + pref_change_registrar_.Init(prefs_); |
| + pref_change_registrar_.Add( |
| + prefs::kProfileAvatarIndex, |
| + base::Bind(&SupervisedUserPrefMappingService::OnAvatarChanged, |
| + weak_ptr_factory_.GetWeakPtr())); |
| + |
| + // Check if we need to update the shared setting with the avatar index. |
| + // Otherwise we update the user pref in case we missed a notification. |
| + if (GetChromeAvatarIndex() == kNoAvatar) |
| + OnAvatarChanged(); |
| + else |
| + OnSharedSettingChanged(managed_user_id_, managed_users::kChromeAvatarIndex); |
| +} |
| + |
| +void SupervisedUserPrefMappingService::OnAvatarChanged() { |
| + int new_avatar_index = prefs_->GetInteger(prefs::kProfileAvatarIndex); |
| + if (new_avatar_index < 0) |
| + return; |
| + |
| + // First check if the avatar index is a new value. |
| + if (GetChromeAvatarIndex() == new_avatar_index) |
| + return; |
| + |
| + // If yes, update the shared settings value. |
| + shared_settings_->SetValue(managed_user_id_, |
| + managed_users::kChromeAvatarIndex, |
| + base::FundamentalValue(new_avatar_index)); |
| +} |
| + |
| +void SupervisedUserPrefMappingService::OnSharedSettingChanged( |
| + const std::string& mu_id, |
| + const std::string& key) { |
| + if (mu_id != managed_user_id_ || key != managed_users::kChromeAvatarIndex) |
|
Bernhard Bauer
2014/02/07 09:54:24
Can you DCHECK that we are being called with our o
Adrian Kuegel
2014/02/07 10:24:47
A, right, since the SupervisedUserPrefMappingServi
|
| + return; |
| + |
| + const base::Value* value = shared_settings_->GetValue(mu_id, key); |
| + int avatar_index; |
| + bool success = value->GetAsInteger(&avatar_index); |
| + DCHECK(success); |
| + prefs_->SetInteger(prefs::kProfileAvatarIndex, avatar_index); |
| +} |
| + |
| +void SupervisedUserPrefMappingService::Shutdown() { |
| + subscription_.reset(); |
| +} |
| + |
| +int SupervisedUserPrefMappingService::GetChromeAvatarIndex() { |
| + const base::Value* value = shared_settings_->GetValue( |
| + managed_user_id_, managed_users::kChromeAvatarIndex); |
| + if (!value) |
| + return kNoAvatar; |
| + |
| + int current_avatar_index; |
| + bool success = value->GetAsInteger(¤t_avatar_index); |
| + DCHECK(success); |
| + return current_avatar_index; |
| +} |