// Copyright (c) 2012 The Chromium OS 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 LOGIN_MANAGER_USER_POLICY_SERVICE_FACTORY_H_
#define LOGIN_MANAGER_USER_POLICY_SERVICE_FACTORY_H_

#include <sys/types.h>

#include <string>

#include <base/macros.h>
#include <base/memory/ref_counted.h>

namespace login_manager {
class NssUtil;
class PolicyService;
class SystemUtils;

// Factory for creating user policy service instances. User policies are stored
// in the root-owned part of the user's cryptohome.
class UserPolicyServiceFactory {
 public:
  UserPolicyServiceFactory(
      uid_t uid,
      NssUtil* nss,
      SystemUtils* system_utils);
  virtual ~UserPolicyServiceFactory();

  // Creates a new user policy service instance.
  virtual PolicyService* Create(const std::string& username);

 private:
  // UID to check for.
  uid_t uid_;

  NssUtil* nss_;
  SystemUtils* system_utils_;

  DISALLOW_COPY_AND_ASSIGN(UserPolicyServiceFactory);
};

}  // namespace login_manager

#endif  // LOGIN_MANAGER_USER_POLICY_SERVICE_FACTORY_H_
