// 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 CHAPS_CHAPS_FACTORY_IMPL_H_
#define CHAPS_CHAPS_FACTORY_IMPL_H_

#include "chaps/chaps_factory.h"

#include <base/macros.h>

namespace chaps {

class ChapsFactoryImpl : public ChapsFactory {
 public:
  ChapsFactoryImpl() {}
  ~ChapsFactoryImpl() override {}
  Session* CreateSession(int slot_id,
                         ObjectPool* token_object_pool,
                         TPMUtility* tpm_utility,
                         HandleGenerator* handle_generator,
                         bool is_read_only) override;
  ObjectPool* CreateObjectPool(HandleGenerator* handle_generator,
                               ObjectStore* store,
                               ObjectImporter* importer) override;
  ObjectStore* CreateObjectStore(const base::FilePath& file_name) override;
  Object* CreateObject() override;
  ObjectPolicy* CreateObjectPolicy(CK_OBJECT_CLASS type) override;
  ObjectImporter* CreateObjectImporter(int slot_id,
                                       const base::FilePath& path,
                                       TPMUtility* tpm_utility) override;

  static ObjectPolicy* GetObjectPolicyForType(CK_OBJECT_CLASS type);

 private:
  DISALLOW_COPY_AND_ASSIGN(ChapsFactoryImpl);
};

}  // namespace chaps

#endif  // CHAPS_CHAPS_FACTORY_IMPL_H_
