File: cdm_factory_daemon.mojom

package info (click to toggle)
chromium 139.0.7258.127-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 6,122,156 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (135 lines) | stat: -rw-r--r-- 5,927 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// 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.

// This defines the mojo interface used between Chrome and the Chrome OS for
// remoting of the Widevine CE CDM and the underlying OEMCrypto implementation.
// This CdmFactoryDaemon interface is bootstrapped over D-Bus and then methods
// can be invoked on it to create a factory and then CDM instance, that same
// interface can also be used to connect directly to the OEMCrypto
// implementation for ARC.

// Next MinVersion: 10

module chromeos.cdm.mojom;

import "chromeos/ash/experiences/arc/mojom/oemcrypto.mojom";
import "chromeos/ash/experiences/arc/mojom/protected_buffer_manager.mojom";
import "chromeos/components/cdm_factory_daemon/mojom/cdm_storage.mojom";
import "chromeos/components/cdm_factory_daemon/mojom/content_decryption_module.mojom";
import "chromeos/components/cdm_factory_daemon/mojom/output_protection.mojom";

// Next Method ID: 2
[Stable, Uuid="732a934d-8e2a-4305-b637-ccbe74ee8b88"]
interface CdmFactory {
  // Deprecated, do not use.
  [MinVersion=1]
  DEPRECATED_1@1(
      pending_associated_remote<ContentDecryptionModuleClient> client,
      pending_associated_remote<CdmStorage> storage,
      pending_associated_receiver<ContentDecryptionModule> cdm,
      pending_remote<OutputProtection> output_protection);

  // Deprecated, do not use.
  [MinVersion=3]
  CreateCdmDeprecated@2(
      pending_associated_remote<ContentDecryptionModuleClient> client,
      pending_associated_remote<CdmStorage> storage,
      pending_remote<OutputProtection> output_protection,
      string host,
      pending_associated_receiver<ContentDecryptionModule> cdm);

  [Stable, Extensible]
  enum CreateCdmStatus {
    [Default] kSuccess,
    kNoMoreInstances,
    kInsufficientGpuResources,
  };

  // Creates a new ContentDecryptionModule instance for a |host| with the
  // corresponding |client|, remote |storage| implementation and
  // |output_protection|. Use an associated interface to ensure ordering and
  // that all become invalidated at the same time.
  [MinVersion=9]
  CreateCdm@3(pending_associated_remote<ContentDecryptionModuleClient> client,
              pending_associated_remote<CdmStorage> storage,
              pending_remote<OutputProtection> output_protection,
              string host,
              pending_associated_receiver<ContentDecryptionModule> cdm) =>
      (CreateCdmStatus result);
};

// Next Method ID: 10
// Used for bootstrapping the connection between ash-chrome browser and the
// cdm-oemcrypto ChromeOS daemon, then methods can be invoked to obtain
// interfaces to perform CDM or OEMCrypto operations. For the OEMCrypto
// operations, those are essentially a passthrough from ARC. The CDM operations
// are essentially a passthrough from JS EME or the video decoder/decryptor
// itself.
[Stable, Uuid="4871bea8-6cf0-479f-86ed-61b3a5acd9b7"]
interface CdmFactoryDaemon {
  // Used to create CdmFactory interfaces which are then used to create a CDM
  // interface. |key_system| should specify what key system we are using,
  // currently only com.widevine.alpha is supported. Returns null if we can't
  // get the interface from the daemon.
  CreateFactory@0(string key_system) => (pending_remote<CdmFactory>? factory);

  // Deprecated, do not use.
  RemovedMethod1@1();

  // Used to establish a connection to the OEMCrypto implementation to provide
  // that service to ARC.
  [MinVersion=1]
  ConnectOemCrypto@2(
      pending_receiver<arc.mojom.OemCryptoService> oemcryptor,
      pending_remote<arc.mojom.ProtectedBufferManager>
          protected_buffer_manager,
      pending_remote<OutputProtection> output_protection);

  // Deprecated, do not use.
  [MinVersion=1]
  RemovedMethod3@3();

  // Returns binary configuration data used for setting up HW decrypt+decode. If
  // successful, |success| will be true and |config_data| will be valid.
  // Otherwise |success| will be false and |config_data| should not be used.
  [MinVersion=2]
  GetHwConfigData@4() => (bool success, array<uint8> config_data);

  // Deprecated, do not use.
  [MinVersion=4]
  RemovedMethod5@5();

  // Returns the provisioned HDCP Key back to Chrome. If successful, it will
  // return the full key. If not, it will return an empty string.
  [MinVersion=5]
  GetHdcp14Key@6() => (string hdcp_key_base64);

  // Returns the wrapped key for injecting into the video decoder when doing ARC
  // playback. This mirrors the ContentDecryptionModule::GetHwKeyData call as
  // they serve the same purpose (Chrome will invoke this one for Android
  // playback and ContentDecryptionModule::GetHwKeyData for Chrome playback).
  [MinVersion=6]
  GetAndroidHwKeyData@7(array<uint8> key_id, array<uint8> hw_identifier) =>
      (DecryptStatus status, array<uint8> key_data);

  // Allocates a secure buffer in TrustZone on ARM platforms. The lifetime of
  // this buffer is managed by the returned fd. This should be resolved to a
  // secure handle through V4L2; the resulting secure handle can then be used
  // for the target of decryption. If the allocation fails, a null handle is
  // returned.
  [MinVersion=7]
  AllocateSecureBuffer@8(uint32 size) => (handle<platform>? fd);

  // Parses the data in the secure buffer referenced by |secure_handle| at
  // |offset| bytes into it as an H264 slice header. |stream_data| should
  // contain the required SPS/PPS structure defined in Chrome and the TA.
  // Returns a bool for success/fail and on success the array will be populated
  // with the slice header structure.
  // NOTE: We do not establish the structures in Mojo because we are not using
  // Mojo in the end-to-end communication.
  [MinVersion=8]
  ParseEncryptedSliceHeader@9(uint64 secure_handle, uint32 offset,
                              array<uint8> stream_data) =>
      (bool success, array<uint8> slice_header);
};