// Copyright 2018 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_BASE_ANDROID_MEDIA_DRM_BRIDGE_FACTORY_H_
#define MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_FACTORY_H_

#include <stdint.h>

#include <memory>
#include <vector>

#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "media/base/android/media_drm_bridge.h"
#include "media/base/android/media_drm_storage_bridge.h"
#include "media/base/cdm_factory.h"
#include "media/base/media_export.h"
#include "media/base/provision_fetcher.h"

namespace media {

struct CdmConfig;

// A factory for creating MediaDrmBridge. Only one MediaDrmBridge can be created
// at any time.
class MEDIA_EXPORT MediaDrmBridgeFactory final : public CdmFactory {
 public:
  MediaDrmBridgeFactory(CreateFetcherCB create_fetcher_cb,
                        CreateStorageCB create_storage_cb);

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

  ~MediaDrmBridgeFactory() override;

  // CdmFactory implementation.
  void Create(const std::string& key_system,
              const CdmConfig& cdm_config,
              const SessionMessageCB& session_message_cb,
              const SessionClosedCB& session_closed_cb,
              const SessionKeysChangeCB& session_keys_change_cb,
              const SessionExpirationUpdateCB& session_expiration_update_cb,
              CdmCreatedCB cdm_created_cb) override;

 private:
  // Callback for Initialize() on |storage_|.
  void OnStorageInitialized(bool success);

  // Creates |media_drm_bridge_|, and call SetMediaCryptoReadyCB() to wait for
  // MediaCrypto to be ready.
  void CreateMediaDrmBridge(const std::string& origin_id);

  // Callback for SetMediaCryptoReadyCB() on |media_drm_bridge_|.
  void OnMediaCryptoReady(JavaObjectPtr media_crypto,
                          bool requires_secure_video_codec);

  CreateFetcherCB create_fetcher_cb_;
  CreateStorageCB create_storage_cb_;

  std::vector<uint8_t> scheme_uuid_;

  MediaDrmBridge::SecurityLevel security_level_ =
      MediaDrmBridge::SECURITY_LEVEL_DEFAULT;

  SessionMessageCB session_message_cb_;
  SessionClosedCB session_closed_cb_;
  SessionKeysChangeCB session_keys_change_cb_;
  SessionExpirationUpdateCB session_expiration_update_cb_;

  // TODO(xhwang): Make CdmCreatedCB an OnceCallback.
  using CdmCreatedOnceCB = base::OnceCallback<CdmCreatedCB::RunType>;
  CdmCreatedOnceCB cdm_created_cb_;

  std::unique_ptr<MediaDrmStorageBridge> storage_;
  scoped_refptr<MediaDrmBridge> media_drm_bridge_;

  base::WeakPtrFactory<MediaDrmBridgeFactory> weak_factory_{this};
};

}  // namespace media

#endif  // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_FACTORY_H_
