15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_PREF_MAPPING_SERVICE_H_
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_PREF_MAPPING_SERVICE_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/callback.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/callback_list.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/weak_ptr.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_change_registrar.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_users.h"
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PrefService;
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SupervisedUserSharedSettingsService;
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// SupervisedUserPrefMappingService maps shared supervised user settings to user
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// preferences. When a shared supervised user setting is updated via sync, the
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// corresponding local user preference is set to this new value.
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class SupervisedUserPrefMappingService : public KeyedService {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef base::CallbackList<void(const std::string&, const std::string&)>
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      CallbackList;
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SupervisedUserPrefMappingService(
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      PrefService* prefs,
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      SupervisedUserSharedSettingsService* shared_settings);
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~SupervisedUserPrefMappingService();
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // KeyedService implementation:
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void Shutdown() OVERRIDE;
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void Init();
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Updates the supervised user shared setting when the avatar has changed.
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnAvatarChanged();
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Called when a supervised user shared setting was changed by receiving new
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // sync data. Updates the corresponding user pref.
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void OnSharedSettingChanged(const std::string& su_id, const std::string& key);
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Returns the current chrome avatar index that is stored as a supervised user
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // shared setting, or -1 if no avatar index is stored.
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int GetChromeAvatarIndex();
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PrefService* prefs_;
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SupervisedUserSharedSettingsService* shared_settings_;
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<CallbackList::Subscription> subscription_;
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string supervised_user_id_;
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PrefChangeRegistrar pref_change_registrar_;
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::WeakPtrFactory<SupervisedUserPrefMappingService> weak_ptr_factory_;
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SupervisedUserPrefMappingService);
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif  // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_PREF_MAPPING_SERVICE_H_
60