// Copyright 2013 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. #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_MULTI_PROFILE_USER_CONTROLLER_H_ #define CHROME_BROWSER_CHROMEOS_LOGIN_MULTI_PROFILE_USER_CONTROLLER_H_ #include #include "base/basictypes.h" #include "base/memory/scoped_vector.h" class PrefChangeRegistrar; class PrefRegistrySimple; class PrefService; class Profile; namespace user_prefs { class PrefRegistrySyncable; } namespace chromeos { class MultiProfileUserControllerDelegate; class UserManager; // MultiProfileUserController decides whether a user is allowed to be in a // multi-profiles session. It caches the multiprofile user behavior pref backed // by user policy into local state so that the value is available before the // user login and checks if the meaning of the value is respected. class MultiProfileUserController { public: MultiProfileUserController(MultiProfileUserControllerDelegate* delegate, PrefService* local_state); ~MultiProfileUserController(); static void RegisterPrefs(PrefRegistrySimple* registry); static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); // Returns true if the user is allowed to be in the current session. bool IsUserAllowedInSession(const std::string& user_email) const; // Starts to observe the multiprofile user behavior pref of the given profile. void StartObserving(Profile* user_profile); // Removes the cached value for the given user. void RemoveCachedValue(const std::string& user_email); // Possible behavior values. static const char kBehaviorUnrestricted[]; static const char kBehaviorPrimaryOnly[]; static const char kBehaviorNotAllowed[]; private: friend class MultiProfileUserControllerTest; // Gets/sets the cached policy value. std::string GetCachedValue(const std::string& user_email) const; void SetCachedValue(const std::string& user_email, const std::string& behavior); // Checks if all users are allowed in the current session. void CheckSessionUsers(); // Invoked when user behavior pref value changes. void OnUserPrefChanged(Profile* profile); MultiProfileUserControllerDelegate* delegate_; // Not owned. PrefService* local_state_; // Not owned. ScopedVector pref_watchers_; DISALLOW_COPY_AND_ASSIGN(MultiProfileUserController); }; } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_LOGIN_MULTI_PROFILE_USER_CONTROLLER_H_