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

Issue 850183002: media: Support unprefixed EME API on Android. (Closed)

Created:
5 years, 11 months ago by xhwang
Modified:
5 years, 11 months ago
CC:
avayvod+watch_chromium.org, chromium-reviews, darin-cc_chromium.org, eme-reviews_chromium.org, feature-media-reviews_chromium.org, jam, mcasas+watch_chromium.org, mkwst+moarreviews-renderer_chromium.org, mlamouri+watch-content_chromium.org, posciak+watch_chromium.org, wjia+watch_chromium.org
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

media: Support unprefixed EME API on Android. Detailed changes: 1. Supports latest MediaKeys API in ProxyMediaKeys, RendererCdmManager, IPC, BrowserCdmManager, BrowserCdm and MediaDrmBridge (C++ and Java), including: - Support new API: CreateSessionAndGenerateRequest, CloseSession, etc. - Support new events: SessionKeysChange and SessionExpirationUpdate. - Remove old events: SessionCreated and SessionReady. - Remove old integer session ID. - Fully support promises. 2. BrowserCdm inherits MediaKeys. As a result, MediaDrmBridge is also a MediaKeys. This will make it easy to use MediaDrmBridge in other places, e.g. in MojoCdmService. 3. MediaDrmBridge Java class refactored to accomodate these changes. Notes: 1. MeidaDrm doesn't support key status. A dummy key ID is used to report key status change. 2. MediaDrm doesn't support expiration time. 3. Persistent session is not supported; ProxyMediaKeys rejects LoadSession() and RemoveSession() right away. 4. Promises are converted to promise ID in ProxyMediaKeys and MediaDrmBridge so that we can pass it over IPC and JNI. BUG=442584 TEST=Prefixed API test pages work. Need to test unprefixed API. Committed: https://crrev.com/d7e021d86cd234f8eb2d48e99f82042b92b1b5c2 Cr-Commit-Position: refs/heads/master@{#312348}

Patch Set 1 #

Total comments: 25

Patch Set 2 : Rebase and address comments. #

Total comments: 24

Patch Set 3 : kMaxSessionIdLength #

Patch Set 4 : Use kMaxWebSessionIdLength for now; will batch rename "WebSessionId" later. #

Patch Set 5 : Addressed comments from qinmin and ddorwin. #

Patch Set 6 : jrummell's comments addressed #

Total comments: 12

Patch Set 7 : comments addressed #

Patch Set 8 : comment addressed #

Total comments: 1

Patch Set 9 : rebase only #

Total comments: 5
Unified diffs Side-by-side diffs Delta from patch set Stats (+1185 lines, -914 lines) Patch
M content/browser/media/android/media_drm_credential_manager.cc View 1 2 3 4 5 1 chunk +1 line, -1 line 0 comments Download
M content/browser/media/cdm/browser_cdm_manager.h View 1 2 3 4 5 6 7 8 4 chunks +66 lines, -37 lines 0 comments Download
M content/browser/media/cdm/browser_cdm_manager.cc View 1 2 3 4 5 6 7 8 14 chunks +237 lines, -111 lines 0 comments Download
M content/common/media/cdm_messages.h View 1 2 3 4 5 6 4 chunks +66 lines, -26 lines 0 comments Download
M content/common/media/cdm_messages_enums.h View 1 1 chunk +2 lines, -2 lines 0 comments Download
M content/renderer/media/crypto/proxy_media_keys.h View 1 2 chunks +31 lines, -45 lines 0 comments Download
M content/renderer/media/crypto/proxy_media_keys.cc View 1 2 3 4 7 chunks +78 lines, -167 lines 0 comments Download
M content/renderer/media/crypto/renderer_cdm_manager.h View 1 2 chunks +40 lines, -17 lines 0 comments Download
M content/renderer/media/crypto/renderer_cdm_manager.cc View 1 2 3 4 5 4 chunks +108 lines, -39 lines 0 comments Download
M media/base/android/browser_cdm_factory_android.h View 1 chunk +5 lines, -5 lines 0 comments Download
M media/base/android/browser_cdm_factory_android.cc View 1 chunk +8 lines, -11 lines 0 comments Download
M media/base/android/java/src/org/chromium/media/MediaDrmBridge.java View 1 2 3 4 26 chunks +166 lines, -163 lines 5 comments Download
M media/base/android/media_drm_bridge.h View 1 2 3 4 5 8 chunks +81 lines, -34 lines 0 comments Download
M media/base/android/media_drm_bridge.cc View 1 2 3 4 5 6 14 chunks +251 lines, -180 lines 0 comments Download
M media/base/browser_cdm.h View 1 chunk +1 line, -36 lines 0 comments Download
M media/base/browser_cdm_factory.h View 2 chunks +11 lines, -11 lines 0 comments Download
M media/base/browser_cdm_factory.cc View 2 chunks +8 lines, -11 lines 0 comments Download
M media/base/cdm_key_information.h View 1 chunk +2 lines, -1 line 0 comments Download
M media/base/cdm_promise_adapter.cc View 1 1 chunk +5 lines, -6 lines 0 comments Download
M media/base/media_keys.h View 1 5 chunks +18 lines, -11 lines 0 comments Download

Messages

Total messages: 36 (5 generated)
xhwang
This CL needs a rebase (on jrummell's recent CLs) and I need a better way ...
5 years, 11 months ago (2015-01-14 21:28:45 UTC) #2
xhwang
This CL needs a rebase (on jrummell's recent CLs) and I need a better way ...
5 years, 11 months ago (2015-01-14 21:30:57 UTC) #3
ddorwin
I skimmed it, but didn't look at the details. jrummell@ should do the full review. ...
5 years, 11 months ago (2015-01-14 23:09:21 UTC) #5
xhwang
jrummell: Please review everything. qinmin: Please review MediaDrmBridge.java ddorwin: I addressed most of your comments. ...
5 years, 11 months ago (2015-01-15 08:13:13 UTC) #6
ddorwin
Thanks. The changes LG, and this seems LG overall. https://codereview.chromium.org/850183002/diff/1/content/browser/media/cdm/browser_cdm_manager.cc File content/browser/media/cdm/browser_cdm_manager.cc (right): https://codereview.chromium.org/850183002/diff/1/content/browser/media/cdm/browser_cdm_manager.cc#newcode306 content/browser/media/cdm/browser_cdm_manager.cc:306: ...
5 years, 11 months ago (2015-01-15 17:36:52 UTC) #7
qinmin
MediaDrmBridge lgtm % comments https://codereview.chromium.org/850183002/diff/20001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java File media/base/android/java/src/org/chromium/media/MediaDrmBridge.java (right): https://codereview.chromium.org/850183002/diff/20001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java#newcode144 media/base/android/java/src/org/chromium/media/MediaDrmBridge.java:144: * Converts byte array to ...
5 years, 11 months ago (2015-01-15 18:17:26 UTC) #8
jrummell
lgtm w/nits https://codereview.chromium.org/850183002/diff/20001/content/renderer/media/crypto/renderer_cdm_manager.cc File content/renderer/media/crypto/renderer_cdm_manager.cc (right): https://codereview.chromium.org/850183002/diff/20001/content/renderer/media/crypto/renderer_cdm_manager.cc#newcode63 content/renderer/media/crypto/renderer_cdm_manager.cc:63: const std::vector<uint8_t>& certificate) { nit: The other ...
5 years, 11 months ago (2015-01-15 18:56:23 UTC) #9
xhwang
gunsch: I am changing BrowserCdm interface. Please take a look at that change from ChromeCast's ...
5 years, 11 months ago (2015-01-15 19:03:44 UTC) #11
xhwang
https://codereview.chromium.org/850183002/diff/20001/content/renderer/media/crypto/renderer_cdm_manager.cc File content/renderer/media/crypto/renderer_cdm_manager.cc (right): https://codereview.chromium.org/850183002/diff/20001/content/renderer/media/crypto/renderer_cdm_manager.cc#newcode63 content/renderer/media/crypto/renderer_cdm_manager.cc:63: const std::vector<uint8_t>& certificate) { On 2015/01/15 18:56:23, jrummell wrote: ...
5 years, 11 months ago (2015-01-15 19:37:26 UTC) #12
xhwang
dcheng: Please OWNERS review changes in content/common/media/cdm_message* There are some inconsistency in the existing code ...
5 years, 11 months ago (2015-01-15 19:39:12 UTC) #14
gunsch
On 2015/01/15 19:39:12, xhwang wrote: > dcheng: Please OWNERS review changes in content/common/media/cdm_message* > > ...
5 years, 11 months ago (2015-01-15 19:48:34 UTC) #15
xhwang
On 2015/01/15 19:48:34, gunsch wrote: > On 2015/01/15 19:39:12, xhwang wrote: > > dcheng: Please ...
5 years, 11 months ago (2015-01-16 17:10:24 UTC) #16
dcheng
This patch is large enough that it's difficult for me to do an IPC review. ...
5 years, 11 months ago (2015-01-17 00:08:17 UTC) #17
xhwang
comments addressed
5 years, 11 months ago (2015-01-17 01:16:09 UTC) #18
xhwang
dcheng: Comments addressed. Sorry about the big CL. Usually I am a big fan of ...
5 years, 11 months ago (2015-01-17 01:20:40 UTC) #19
dcheng
https://codereview.chromium.org/850183002/diff/100001/content/browser/media/cdm/browser_cdm_manager.cc File content/browser/media/cdm/browser_cdm_manager.cc (right): https://codereview.chromium.org/850183002/diff/100001/content/browser/media/cdm/browser_cdm_manager.cc#newcode197 content/browser/media/cdm/browser_cdm_manager.cc:197: void BrowserCdmManager::ResolvePromise<std::string>( On 2015/01/17 01:20:39, xhwang wrote: > On ...
5 years, 11 months ago (2015-01-20 23:33:03 UTC) #20
xhwang
Please take another look. Thanks! https://codereview.chromium.org/850183002/diff/100001/content/browser/media/cdm/browser_cdm_manager.cc File content/browser/media/cdm/browser_cdm_manager.cc (right): https://codereview.chromium.org/850183002/diff/100001/content/browser/media/cdm/browser_cdm_manager.cc#newcode197 content/browser/media/cdm/browser_cdm_manager.cc:197: void BrowserCdmManager::ResolvePromise<std::string>( On 2015/01/20 ...
5 years, 11 months ago (2015-01-21 00:03:03 UTC) #21
dcheng
IPC changes LGTM https://codereview.chromium.org/850183002/diff/140001/content/browser/media/cdm/browser_cdm_manager.cc File content/browser/media/cdm/browser_cdm_manager.cc (right): https://codereview.chromium.org/850183002/diff/140001/content/browser/media/cdm/browser_cdm_manager.cc#newcode92 content/browser/media/cdm/browser_cdm_manager.cc:92: void CdmPromiseInternal<>::resolve() { I'm not going ...
5 years, 11 months ago (2015-01-21 00:12:05 UTC) #22
xhwang
On 2015/01/21 00:12:05, dcheng wrote: > IPC changes LGTM > > https://codereview.chromium.org/850183002/diff/140001/content/browser/media/cdm/browser_cdm_manager.cc > File content/browser/media/cdm/browser_cdm_manager.cc ...
5 years, 11 months ago (2015-01-21 00:52:37 UTC) #23
xhwang
rebase only
5 years, 11 months ago (2015-01-21 05:45:05 UTC) #24
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/850183002/160001
5 years, 11 months ago (2015-01-21 06:51:11 UTC) #26
commit-bot: I haz the power
Committed patchset #9 (id:160001)
5 years, 11 months ago (2015-01-21 14:14:24 UTC) #27
commit-bot: I haz the power
Patchset 9 (id:??) landed as https://crrev.com/d7e021d86cd234f8eb2d48e99f82042b92b1b5c2 Cr-Commit-Position: refs/heads/master@{#312348}
5 years, 11 months ago (2015-01-21 14:16:44 UTC) #28
dcheng
On 2015/01/21 at 00:52:37, xhwang wrote: > On 2015/01/21 00:12:05, dcheng wrote: > > IPC ...
5 years, 11 months ago (2015-01-21 22:13:38 UTC) #29
xhwang
On 2015/01/21 22:13:38, dcheng wrote: > On 2015/01/21 at 00:52:37, xhwang wrote: > > On ...
5 years, 11 months ago (2015-01-21 22:28:59 UTC) #30
gunsch
https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java File media/base/android/java/src/org/chromium/media/MediaDrmBridge.java (right): https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java#newcode554 media/base/android/java/src/org/chromium/media/MediaDrmBridge.java:554: Log.d(TAG, "Session " + bytesToHexString(sessionId) + "closed."); Should onSessionClosed ...
5 years, 11 months ago (2015-01-22 05:41:15 UTC) #31
xhwang
https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java File media/base/android/java/src/org/chromium/media/MediaDrmBridge.java (right): https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java#newcode554 media/base/android/java/src/org/chromium/media/MediaDrmBridge.java:554: Log.d(TAG, "Session " + bytesToHexString(sessionId) + "closed."); On 2015/01/22 ...
5 years, 11 months ago (2015-01-22 17:42:14 UTC) #32
gunsch
https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java File media/base/android/java/src/org/chromium/media/MediaDrmBridge.java (right): https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java#newcode554 media/base/android/java/src/org/chromium/media/MediaDrmBridge.java:554: Log.d(TAG, "Session " + bytesToHexString(sessionId) + "closed."); Thanks for ...
5 years, 11 months ago (2015-01-22 17:47:02 UTC) #33
xhwang
https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java File media/base/android/java/src/org/chromium/media/MediaDrmBridge.java (right): https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java#newcode554 media/base/android/java/src/org/chromium/media/MediaDrmBridge.java:554: Log.d(TAG, "Session " + bytesToHexString(sessionId) + "closed."); On 2015/01/22 ...
5 years, 11 months ago (2015-01-22 17:48:44 UTC) #34
ddorwin
https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java File media/base/android/java/src/org/chromium/media/MediaDrmBridge.java (right): https://codereview.chromium.org/850183002/diff/160001/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java#newcode554 media/base/android/java/src/org/chromium/media/MediaDrmBridge.java:554: Log.d(TAG, "Session " + bytesToHexString(sessionId) + "closed."); On 2015/01/22 ...
5 years, 11 months ago (2015-01-22 17:54:32 UTC) #35
xhwang
5 years, 11 months ago (2015-01-22 18:01:53 UTC) #36
Message was sent while issue was closed.
On 2015/01/22 17:54:32, ddorwin wrote:
>
https://codereview.chromium.org/850183002/diff/160001/media/base/android/java...
> File media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
(right):
> 
>
https://codereview.chromium.org/850183002/diff/160001/media/base/android/java...
> media/base/android/java/src/org/chromium/media/MediaDrmBridge.java:554:
> Log.d(TAG, "Session " + bytesToHexString(sessionId) + "closed.");
> On 2015/01/22 17:48:44, xhwang wrote:
> > On 2015/01/22 17:47:01, gunsch wrote:
> > > Thanks for the details. So to confirm my understanding, it sounds like the
> > > meaning of SessionClosedCB& has changed slightly. It should now only be
> called
> > > when the session is closed _outside_ of the closeSession(Promise) path,
and
> no
> > > longer as a standard response to a closeSession() operation.
> > 
> > This is a perfect summarize :)
> 
> It is not a response to close session (we have promises for that), but if/when
> the CDM closes the session in response to closeSession(), it should call
> SessionClosedCB.
> 
> SessionClosedCB is how we know to resolve the closed promise attribute on
> MediaKeySession.

David is right and I misunderstood it. Now I looked at other places and we
should call OnSessionClosed() after resolving the promise:

https://code.google.com/p/chromium/codesearch#chromium/src/media/cdm/ppapi/ap...

and here is what AesDecryptor does:

https://code.google.com/p/chromium/codesearch#chromium/src/media/cdm/aes_decr...

I'll fix MediaDrmBridge.

But now I am confused about prefixed EME, are we calling OnSessionClosed()
twice? One in the promise resolving, and one explicitly? I'll double check this.

Powered by Google App Engine
This is Rietveld 408576698