Chromium Code Reviews| 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..88e713254fa3d84ed2f05189749322052e87c925 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,19 @@ 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; |
|
xhwang
2017/04/05 18:31:50
To avoid confusion:
assert info.sessionId() == se
yucliu1
2017/04/05 23:04:07
Done.
|
| + |
| + 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 +232,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) { |
| + remove(sessionId); |
|
yucliu1
2017/04/04 21:42:20
Don't remove the session, just set key set id to n
yucliu1
2017/04/05 00:57:45
Done.
|
| + mStorage.clearInfo(sessionId.emeId(), callback); |
| + } |
| + |
| + /** |
| * Remove session and related infomration from memory, but doesn't touch |
| * persistent storage. |
| */ |