| Index: media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
|
| diff --git a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
|
| index bb7e7d6c19784847e39e99b4ec38ae3b69018b8c..b0ce6f0006efcb60fe3e1c74c1de93270e071798 100644
|
| --- a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
|
| +++ b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
|
| @@ -227,17 +227,16 @@ public class MediaDrmBridge {
|
| * @return whether a MediaCrypto object is successfully created.
|
| */
|
| private boolean createMediaCrypto() throws android.media.NotProvisionedException {
|
| - if (mMediaDrm == null) {
|
| - return false;
|
| - }
|
| + assert mMediaDrm != null;
|
| assert !mProvisioningPending;
|
| assert mMediaCryptoSession == null;
|
| assert mMediaCrypto == null;
|
|
|
| - // Open media crypto session.
|
| + // Open media crypto session. This could throw NotProvisionedException.
|
| mMediaCryptoSession = openSession();
|
| if (mMediaCryptoSession == null) {
|
| Log.e(TAG, "Cannot create MediaCrypto Session.");
|
| + release();
|
| return false;
|
| }
|
| Log.d(TAG, "MediaCrypto Session created: %s", bytesToHexString(mMediaCryptoSession));
|
| @@ -248,8 +247,6 @@ public class MediaDrmBridge {
|
| if (MediaCrypto.isCryptoSchemeSupported(mSchemeUUID)) {
|
| mMediaCrypto = new MediaCrypto(mSchemeUUID, mMediaCryptoSession);
|
| Log.d(TAG, "MediaCrypto successfully created!");
|
| - // Notify the native code that MediaCrypto is ready.
|
| - onMediaCryptoReady();
|
| return true;
|
| } else {
|
| Log.e(TAG, "Cannot create MediaCrypto for unsupported scheme.");
|
| @@ -393,14 +390,6 @@ public class MediaDrmBridge {
|
| }
|
|
|
| /**
|
| - * Return the MediaCrypto object if available.
|
| - */
|
| - @CalledByNative
|
| - private MediaCrypto getMediaCrypto() {
|
| - return mMediaCrypto;
|
| - }
|
| -
|
| - /**
|
| * Reset the device DRM credentials.
|
| */
|
| @CalledByNative
|
| @@ -582,10 +571,16 @@ public class MediaDrmBridge {
|
| byte[] sessionId = null;
|
| try {
|
| // Create MediaCrypto if necessary.
|
| - if (mMediaCrypto == null && !createMediaCrypto()) {
|
| - onPromiseRejected(promiseId, "MediaCrypto creation failed.");
|
| - return;
|
| + if (mMediaCrypto == null) {
|
| + boolean success = createMediaCrypto();
|
| + // |mMediaCrypto| could be null upon failure. Notify the native code in all cases.
|
| + onMediaCryptoReady();
|
| + if (!success) {
|
| + onPromiseRejected(promiseId, "MediaCrypto creation failed.");
|
| + return;
|
| + }
|
| }
|
| +
|
| assert mMediaCryptoSession != null;
|
| assert mMediaCrypto != null;
|
|
|
| @@ -806,7 +801,7 @@ public class MediaDrmBridge {
|
|
|
| private void onMediaCryptoReady() {
|
| if (isNativeMediaDrmBridgeValid()) {
|
| - nativeOnMediaCryptoReady(mNativeMediaDrmBridge);
|
| + nativeOnMediaCryptoReady(mNativeMediaDrmBridge, mMediaCrypto);
|
| }
|
| }
|
|
|
| @@ -972,7 +967,8 @@ public class MediaDrmBridge {
|
|
|
| // Native functions. At the native side, must post the task immediately to
|
| // avoid reentrancy issues.
|
| - private native void nativeOnMediaCryptoReady(long nativeMediaDrmBridge);
|
| + private native void nativeOnMediaCryptoReady(
|
| + long nativeMediaDrmBridge, MediaCrypto mediaCrypto);
|
|
|
| private native void nativeOnStartProvisioning(
|
| long nativeMediaDrmBridge, String defaultUrl, byte[] requestData);
|
|
|