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

Unified Diff: media/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java

Issue 2790783002: [Clank] Add JNI interface for media persistent license storage (Closed)
Patch Set: Fix lint Created 3 years, 9 months 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/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java
diff --git a/media/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java b/media/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java
new file mode 100644
index 0000000000000000000000000000000000000000..c085f1d9f98ce5d65ff1dc2ce24c20a3b750a689
--- /dev/null
+++ b/media/base/android/java/src/org/chromium/media/MediaDrmStorageBridge.java
@@ -0,0 +1,107 @@
+// 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.
+
+package org.chromium.media;
+
+import android.annotation.TargetApi;
+import android.os.Build;
+
+import org.chromium.base.Callback;
+import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.annotations.MainDex;
+
+/**
+ * Origin isolated media drm scope id storage. Isolated origin is guranteed by native
+ * implementation. Thus no origin information is stored here.
+ */
+@JNINamespace("media")
+@MainDex
+@TargetApi(Build.VERSION_CODES.M)
+class MediaDrmStorageBridge {
+ private static final long INVALID_NATIVE_MEDIA_DRM_STORAGE_BRIDGE = -1;
+
+ private long mNativeMediaDrmStorageBridge;
+
+ /**
+ * Information that need to be persistent on the device. Exposed to JNI.
+ */
+ @MainDex
+ static class PersistentInfo {
+ // EME session ID, which is generated randomly.
+ private final byte[] mEmeId;
+
+ // Key set ID used to identify persistent license in MediaDrm.
+ private final byte[] mKeySetId;
+
+ // Mime type for the license.
+ private final String mMimeType;
+
+ PersistentInfo(byte[] emeId, byte[] keySetId, String mime) {
+ mEmeId = emeId;
+ mKeySetId = keySetId;
+ mMimeType = mime;
+ }
+ }
+
+ MediaDrmStorageBridge(long nativeMediaDrmStorageBridge) {
+ mNativeMediaDrmStorageBridge = nativeMediaDrmStorageBridge;
+ assert isNativeMediaDrmStorageValid();
+ }
+
+ /**
+ * Called when device provisioning is finished.
+ */
+ void onProvisioned(Callback<Boolean> cb) {
+ if (isNativeMediaDrmStorageValid()) {
+ nativeOnProvisioned(mNativeMediaDrmStorageBridge, cb);
+ } else {
+ cb.onResult(true);
+ }
+ }
+
+ /**
+ * Load |emeId|'s storage into memory.
+ */
+ void loadInfo(byte[] emeId, Callback<PersistentInfo> cb) {
+ if (isNativeMediaDrmStorageValid()) {
+ nativeOnLoadInfo(mNativeMediaDrmStorageBridge, emeId, cb);
+ } else {
+ cb.onResult(null);
+ }
+ }
+
+ /**
+ * Save persistent information. Override the existing value.
+ */
+ void saveInfo(PersistentInfo info, Callback<Boolean> cb) {
+ if (isNativeMediaDrmStorageValid()) {
+ nativeOnSaveInfo(mNativeMediaDrmStorageBridge, info, cb);
+ } else {
+ cb.onResult(false);
+ }
+ }
+
+ /**
+ * Remove persistent information related |emeId|.
+ */
+ void clearInfo(byte[] emeId, Callback<Boolean> cb) {
+ if (isNativeMediaDrmStorageValid()) {
+ nativeOnClearInfo(mNativeMediaDrmStorageBridge, emeId, cb);
+ } else {
+ cb.onResult(true);
+ }
+ }
+
+ private boolean isNativeMediaDrmStorageValid() {
+ return mNativeMediaDrmStorageBridge != INVALID_NATIVE_MEDIA_DRM_STORAGE_BRIDGE;
+ }
+
+ private native void nativeOnProvisioned(long nativeMediaDrmStorageBridge, Callback<Boolean> cb);
+ private native void nativeOnLoadInfo(
+ long nativeMediaDrmStorageBridge, byte[] sessionId, Callback<PersistentInfo> cb);
+ private native void nativeOnSaveInfo(
+ long nativeMediaDrmStorageBridge, PersistentInfo info, Callback<Boolean> cb);
+ private native void nativeOnClearInfo(
+ long nativeMediaDrmStorageBridge, byte[] sessionId, Callback<Boolean> cb);
+}
« no previous file with comments | « media/base/android/java/src/org/chromium/media/MediaDrmSessionManager.java ('k') | media/base/android/media_drm_bridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698