Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(377)

Unified Diff: media/mojo/interfaces/content_decryption_module.mojom

Issue 763883006: Add Mojo CDM Service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/mojo/interfaces/content_decryption_module.mojom
diff --git a/media/mojo/interfaces/content_decryption_module.mojom b/media/mojo/interfaces/content_decryption_module.mojom
new file mode 100644
index 0000000000000000000000000000000000000000..9baf606e6184187b25b9ec777192aac3c45d8af8
--- /dev/null
+++ b/media/mojo/interfaces/content_decryption_module.mojom
@@ -0,0 +1,112 @@
+// Copyright 2014 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.
+
+module mojo;
+
+import "media/mojo/interfaces/decryptor.mojom";
+
+// Transport layer of media::MediaKeys::Exception (see media/base/media_keys.h).
+// This is used for ContentDecryptionModule (CDM) promise rejections.
+// Note: This can also be used for session errors in prefixed API.
+enum CdmException {
+ NOT_SUPPORTED_ERROR,
+ INVALID_STATE_ERROR,
+ INVALID_ACCESS_ERROR,
+ QUOTA_EXCEEDED_ERROR,
+ UNKNOWN_ERROR,
+ CLIENT_ERROR,
+ OUTPUT_ERROR
+};
+
+// Transport layer of media::CdmPromise (see media/base/cdm_promise.h).
+// - When |success| is true, the promise is resolved and all other fields should
+// be ignored.
+// - When |success| is false, the promise is rejected with |exception|,
+// |system_code| and |error_message|.
+struct CdmPromiseResult {
+ bool success;
+ CdmException exception;
+ uint32 system_code;
+ string error_message;
+};
+
+// An interface that represents a CDM in the Encrypted Media Extensions (EME)
+// spec (https://w3c.github.io/encrypted-media/). See media/base/media_keys.h.
+[Client=ContentDecryptionModuleClient]
+interface ContentDecryptionModule {
+ // See media::MediaKeys::SessionType.
+ enum SessionType {
+ TEMPORARY_SESSION,
+ PERSISTENT_SESSION
+ };
+
+ // Provides a server certificate to be used to encrypt messages to the
+ // license server.
+ SetServerCertificate(array<uint8> certificate_data)
+ => (CdmPromiseResult result);
+
+ // Creates a session with the |init_data_type|, |init_data| and |session_type|
+ // provided. If |result.success| is false, the output |session_id| will be
+ // null.
+ CreateSession(string init_data_type,
+ array<uint8> init_data,
+ SessionType session_type)
+ => (CdmPromiseResult result, string? session_id);
+
+ // Loads the session associated with |session_id|. Combinations of
+ // |result.success| and |session_id| means:
+ // (true, non-null) : Session successfully loaded.
+ // (true, null) : Session not found.
+ // (false, non-null): N/A; this combination is not allowed.
+ // (false, null) : Unexpected error. See other fields in |result|.
+ LoadSession(string session_id)
+ => (CdmPromiseResult result, string? session_id);
+
+ // Updates a session specified by |session_id| with |response|.
+ UpdateSession(string session_id, array<uint8> response)
+ => (CdmPromiseResult result);
+
+ // Closes the session specified by |session_id|.
+ CloseSession(string session_id) => (CdmPromiseResult result);
+
+ // Removes stored session data associated with the active session specified by
+ // |session_id|.
+ RemoveSession(string session_id) => (CdmPromiseResult result);
+
+ // Retrieves the key IDs for keys in the session that the CDM knows are
+ // currently usable to decrypt media data. If |result.success| is
+ // false, the |usable_key_ids| will be null.
+ GetUsableKeyIds(string session_id)
+ => (CdmPromiseResult result, array<array<uint8>>? usable_key_ids);
+
+ // Assigns the |cdm_id| to the CDM, and retrieves the |decryptor| associated
+ // with this CDM instance.
+ // A CDM implementation must choose to support either an explicit or implicit
+ // decryptor:
+ // - Explicit (non-null) decryptor: The client (e.g. media pipeline) will use
+ // the |decryptor| directly to decrypt (and decode) encrypted buffers.
+ // - Implicit (null) decryptor: The client (e.g. media pipeline) will use the
+ // |cdm_id| to locate a decryptor and associate it with the client.
+ // Note: In Chromium GetCdmContext() is a sync call. But we don't have an easy
+ // way to support sync calls on a mojo interface. Instead the client should
+ // generate a client side ID and pass it to the service.
+ GetCdmContext(int32 cdm_id, Decryptor&? decryptor);
+};
+
+// Session callbacks. See media/base/media_keys.h for details.
+interface ContentDecryptionModuleClient {
+ OnSessionMessage(string session_id, array<uint8> message,
+ string destination_url);
+
+ OnSessionReady(string session_id);
+
+ OnSessionClosed(string session_id);
+
+ OnSessionError(string session_id, CdmException exception,
+ uint32 system_code, string error_message);
+
+ OnSessionKeysChange(string session_id, bool has_additional_usable_key);
+
+ OnSessionExpirationUpdate(string session_id, int64 new_expiry_time_usec);
+};

Powered by Google App Engine
This is Rietveld 408576698