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

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

Issue 2796843002: [Clank] Load/Remove persistent license (Closed)
Patch Set: nit Created 3 years, 8 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/MediaDrmSessionManager.java
diff --git a/media/base/android/java/src/org/chromium/media/MediaDrmSessionManager.java b/media/base/android/java/src/org/chromium/media/MediaDrmSessionManager.java
index 42e6675bd4f98fe5a60845aa0c56c645421f34c4..8bf38f5e19abcec6806e618a4020231a32a21fc7 100644
--- a/media/base/android/java/src/org/chromium/media/MediaDrmSessionManager.java
+++ b/media/base/android/java/src/org/chromium/media/MediaDrmSessionManager.java
@@ -87,6 +87,13 @@ class MediaDrmSessionManager {
return new SessionId(drmId, drmId, null /* keySetId */);
}
+ /**
+ * Create session ID used to report session doesn't exist.
+ */
+ static SessionId createNoExistSessionId() {
+ return createTemporarySessionId(new byte[0]);
+ }
+
private SessionId(byte[] emeId, byte[] drmId, byte[] keySetId) {
assert emeId != null;
assert drmId != null || keySetId != null;
@@ -165,6 +172,16 @@ class MediaDrmSessionManager {
return new PersistentInfo(mSessionId.emeId(), mSessionId.keySetId(), mMimeType);
}
+
+ private static SessionInfo fromPersistentInfo(PersistentInfo persistentInfo) {
+ assert persistentInfo != null;
+ assert persistentInfo.emeId() != null;
+ assert persistentInfo.keySetId() != null;
+
+ SessionId sessionId = new SessionId(
+ persistentInfo.emeId(), null /* drmId */, persistentInfo.keySetId());
+ return new SessionInfo(sessionId, persistentInfo.mimeType(), MediaDrm.KEY_TYPE_OFFLINE);
+ }
}
// Maps from DRM/EME session ID to SessionInfo. SessionInfo contains
@@ -189,6 +206,20 @@ class MediaDrmSessionManager {
}
/**
+ * Set drm ID. It should only be called for persistent license session
+ * without an opened drm session.
+ */
+ void setDrmId(SessionId sessionId, byte[] drmId) {
+ SessionInfo info = get(sessionId);
+
+ assert info != null;
+ assert info.sessionId().isEqual(sessionId);
+
+ sessionId.setDrmId(drmId);
+ mDrmSessionInfoMap.put(ByteBuffer.wrap(drmId), info);
+ }
+
+ /**
* Set key set ID. It should only be called for persistent license session.
*/
void setKeySetId(SessionId sessionId, byte[] keySetId, Callback<Boolean> callback) {
@@ -202,6 +233,50 @@ class MediaDrmSessionManager {
}
/**
+ * Mark key as released. It should only be called for persistent license
+ * session.
+ */
+ void markKeyReleased(SessionId sessionId) {
+ SessionInfo info = get(sessionId);
+
+ assert info != null;
+ assert info.keyType() == MediaDrm.KEY_TYPE_OFFLINE;
+
+ info.setKeyType(MediaDrm.KEY_TYPE_RELEASE);
+ }
+
+ /**
+ * Load |emeId|'s session data from persistent storage.
+ */
+ void load(byte[] emeId, final Callback<SessionId> callback) {
+ mStorage.loadInfo(emeId, new Callback<PersistentInfo>() {
+ @Override
+ public void onResult(PersistentInfo persistentInfo) {
+ if (persistentInfo == null) {
+ callback.onResult(null);
+ return;
+ }
+
+ // Loading same persistent license into different sessions isn't
+ // supported.
+ assert getSessionIdByEmeId(persistentInfo.emeId()) == null;
+
+ SessionInfo info = SessionInfo.fromPersistentInfo(persistentInfo);
+ mEmeSessionInfoMap.put(ByteBuffer.wrap(persistentInfo.emeId()), info);
+ callback.onResult(info.sessionId());
+ }
+ });
+ }
+
+ /**
+ * Remove persistent license info from persistent storage.
+ */
+ void clearPersistentSessionInfo(SessionId sessionId, Callback<Boolean> callback) {
+ sessionId.setKeySetId(null);
+ mStorage.clearInfo(sessionId.emeId(), callback);
+ }
+
+ /**
* Remove session and related infomration from memory, but doesn't touch
* persistent storage.
*/

Powered by Google App Engine
This is Rietveld 408576698