// 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_OUTPUT_PROTECTION_H_
#define MEDIA_CDM_OUTPUT_PROTECTION_H_

#include <stdint.h>

#include "base/callback.h"
#include "base/macros.h"
#include "media/base/media_export.h"

namespace media {

class MEDIA_EXPORT OutputProtection {
 public:
  OutputProtection() = default;

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

  virtual ~OutputProtection() = default;

  using QueryStatusCB = base::OnceCallback<
      void(bool success, uint32_t link_mask, uint32_t protection_mask)>;
  using EnableProtectionCB = base::OnceCallback<void(bool success)>;

  // Connected output link types returned by QueryStatus(). Must match values
  // in cdm::OutputLinkTypes.
  enum class LinkTypes {
    NONE = 0,
    UNKNOWN = 1,
    INTERNAL = 2,
    VGA = 4,
    HDMI = 8,
    DVI = 16,
    DISPLAYPORT = 32,
    NETWORK = 64,
  };

  // Supported output protection methods for use with EnableProtection() and
  // returned by QueryStatus(). Must match values in
  // cdm::OutputProtectionMethods.
  enum class ProtectionType {
    NONE = 0,
    HDCP = 1,
  };

  // Queries link status and protection status. Clients need to query status
  // periodically in order to detect changes. |callback| will be called with
  // the following values:
  // - success: Whether the query succeeded. If false, values of |link_mask|
  //   and |protection_mask| should be ignored.
  // - link_mask: The type of connected output links, which is a bit-mask of
  //   the LinkType values.
  // - protection_mask: The type of enabled protections, which is a bit-mask
  //   of the ProtectionType values.
  virtual void QueryStatus(QueryStatusCB callback) = 0;

  // Sets desired protection methods. |desired_protection_mask| is a bit-mask
  // of ProtectionType values. Calls |callback| when the request has been made.
  // Users should call QueryStatus() to verify that it was actually applied.
  // Protections will be disabled if no longer desired by all instances.
  // |callback| will be called with the following value:
  // - success: True when the protection request has been made. This may be
  //   before the protection have actually been applied. False if it failed
  //   to make the protection request, and in this case there is no need to
  //   call QueryStatus().
  virtual void EnableProtection(uint32_t desired_protection_mask,
                                EnableProtectionCB callback) = 0;
};

}  // namespace media

#endif  // MEDIA_CDM_OUTPUT_PROTECTION_H_
