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..3416f226db3ce0ec443fc0a48a79aa4124cc33fd 100644 |
--- a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java |
+++ b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java |
@@ -234,10 +234,11 @@ public class MediaDrmBridge { |
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)); |
@@ -249,7 +250,6 @@ public class MediaDrmBridge { |
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 +393,6 @@ public class MediaDrmBridge { |
} |
/** |
- * Return the MediaCrypto object if available. |
- */ |
- @CalledByNative |
- private MediaCrypto getMediaCrypto() { |
- return mMediaCrypto; |
- } |
- |
- /** |
* Reset the device DRM credentials. |
*/ |
@CalledByNative |
@@ -582,10 +574,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 +804,7 @@ public class MediaDrmBridge { |
private void onMediaCryptoReady() { |
if (isNativeMediaDrmBridgeValid()) { |
- nativeOnMediaCryptoReady(mNativeMediaDrmBridge); |
+ nativeOnMediaCryptoReady(mNativeMediaDrmBridge, mMediaCrypto); |
} |
} |
@@ -972,7 +970,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); |