chromium/chromeos/components/cdm_factory_daemon/mojom/output_protection.mojom

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Next MinVersion: 1

module chromeos.cdm.mojom;

// Provides an interface for Chrome OS to apply and/or query content protection
// settings for an output link. These have no ability to specify a specific
// display, so they will be relevant to all external outputs. When the Mojo
// connection is dropped, the request will be cancelled.
// Next Method ID: 2
[Stable, Uuid="1eab4228-7293-4ec9-ba76-52d9accd451a"]
interface OutputProtection {
  // HDCP protection types.
  [Stable, Extensible]
  enum ProtectionType {
    NONE = 0,
    HDCP_TYPE_0 = 1,  // Inferred to be HDCP 1.4.
    HDCP_TYPE_1 = 2,  // Inferred to be HDCP 2.2.
  };

  // Video output link types.
  [Stable, Extensible]
  enum LinkType {
    NONE = 0,
    UNKNOWN = 1,
    INTERNAL = 2,
    VGA = 4,
    HDMI = 8,
    DVI = 16,
    DISPLAYPORT = 32,
    NETWORK = 64,
  };

  // Queries link status and protection status.
  // Clients need to query status periodically in order to detect changes.
  //
  // - success: Whether the query succeeded. If false, values of |link_mask| and
  //   |protection| should be ignored.
  // - link_mask: The type of connected output links, which is a bit-mask of the
  //   LinkType values.
  // - protection: The highest level of HDCP that is applied across all the
  //   external outputs.
  QueryStatus@0() => (bool success, uint32 link_mask,
                      ProtectionType protection);

  // Sets desired protection method.
  //
  // When the desired protection method has been applied to all applicable
  // output links, the |protection| returned by QueryStatus() will be set if it
  // was able to be achieved. There is no separate error code or callback for a
  // failure to set a desired ProtectionType.
  //
  // Protection will be disabled if no longer desired by all instances.
  //
  // - desired_protection: The desired protection method.
  // - success: True when the protection request has been made. This may be
  //   before the protection has actually been applied. Call QueryStatus() to
  //   get protection status. False if it failed to make the protection request,
  //   and in this case there is no need to call QueryStatus().
  EnableProtection@1(ProtectionType desired_protection) => (bool success);
};