// Copyright 2017 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 MEDIA_CDM_CDM_MODULE_H_
#define MEDIA_CDM_CDM_MODULE_H_

#include <memory>
#include <vector>

#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/scoped_native_library.h"
#include "media/base/media_export.h"
#include "media/cdm/api/content_decryption_module.h"
#include "media/media_buildflags.h"

#if BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)
#include "media/cdm/cdm_host_file.h"
#include "media/cdm/cdm_host_files.h"
#endif  // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)

namespace media {

class MEDIA_EXPORT CdmModule {
 public:
  static CdmModule* GetInstance();

  // Reset the CdmModule instance so that each test have it's own instance.
  static void ResetInstanceForTesting();

  CdmModule(const CdmModule&) = delete;
  CdmModule& operator=(const CdmModule&) = delete;

  ~CdmModule();

  using CreateCdmFunc = decltype(&::CreateCdmInstance);

  CreateCdmFunc GetCreateCdmFunc();

// Loads the CDM, initialize function pointers and initialize the CDM module.
// This must only be called only once.
#if BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)
  bool Initialize(const base::FilePath& cdm_path,
                  std::vector<CdmHostFilePath> cdm_host_file_paths);
#else
  bool Initialize(const base::FilePath& cdm_path);
#endif  // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)

  // Calls INITIALIZE_CDM_MODULE on the actually library CDM. Must be called
  // within the sandbox!
  void InitializeCdmModule();

 private:
  using InitializeCdmModuleFunc = decltype(&::INITIALIZE_CDM_MODULE);
  using DeinitializeCdmModuleFunc = decltype(&::DeinitializeCdmModule);
  using GetCdmVersionFunc = decltype(&::GetCdmVersion);

  CdmModule();

  bool initialized_ = false;
  base::FilePath cdm_path_;
  base::ScopedNativeLibrary library_;
  CreateCdmFunc create_cdm_func_ = nullptr;
  InitializeCdmModuleFunc initialize_cdm_module_func_ = nullptr;
  DeinitializeCdmModuleFunc deinitialize_cdm_module_func_ = nullptr;
  GetCdmVersionFunc get_cdm_version_func_ = nullptr;
};

}  // namespace media

#endif  // MEDIA_CDM_CDM_MODULE_H_
