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 b5191067dec0cc45dcbb50c07da23694e6026426..a024240a027674fc60f68b438436bb5dc026b271 100644 |
--- a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java |
+++ b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java |
@@ -59,20 +59,18 @@ class MediaDrmBridge { |
return new UUID(mostSigBits, leastSigBits); |
} |
- private MediaDrmBridge(UUID schemeUUID, String securityLevel, int nativeMediaDrmBridge) { |
- try { |
- mSchemeUUID = schemeUUID; |
- mMediaDrm = new MediaDrm(schemeUUID); |
- mHandler = new Handler(); |
- mNativeMediaDrmBridge = nativeMediaDrmBridge; |
- mMediaDrm.setOnEventListener(new MediaDrmListener()); |
- mMediaDrm.setPropertyString(PRIVACY_MODE, "enable"); |
+ private MediaDrmBridge(UUID schemeUUID, String securityLevel, int nativeMediaDrmBridge) |
+ throws android.media.UnsupportedSchemeException { |
+ mSchemeUUID = schemeUUID; |
+ mMediaDrm = new MediaDrm(schemeUUID); |
+ mHandler = new Handler(); |
+ mNativeMediaDrmBridge = nativeMediaDrmBridge; |
+ mMediaDrm.setOnEventListener(new MediaDrmListener()); |
+ mMediaDrm.setPropertyString(PRIVACY_MODE, "enable"); |
+ String currentSecurityLevel = mMediaDrm.getPropertyString(SECURITY_LEVEL); |
+ Log.e(TAG, "Security level: current " + currentSecurityLevel + ", new " + securityLevel); |
+ if (!securityLevel.equals(currentSecurityLevel)) |
mMediaDrm.setPropertyString(SECURITY_LEVEL, securityLevel); |
- } catch (android.media.UnsupportedSchemeException e) { |
- Log.e(TAG, "Unsupported DRM scheme: " + e.toString()); |
- } catch (java.lang.IllegalArgumentException e) { |
- Log.e(TAG, "Failed to set DRM properties: " + e.toString()); |
- } |
} |
/** |
@@ -146,10 +144,21 @@ class MediaDrmBridge { |
private static MediaDrmBridge create( |
byte[] schemeUUID, String securityLevel, int nativeMediaDrmBridge) { |
UUID cryptoScheme = getUUIDFromBytes(schemeUUID); |
- if (cryptoScheme != null && MediaDrm.isCryptoSchemeSupported(cryptoScheme)) { |
- return new MediaDrmBridge(cryptoScheme, securityLevel, nativeMediaDrmBridge); |
+ if (cryptoScheme == null || !MediaDrm.isCryptoSchemeSupported(cryptoScheme)) { |
+ return null; |
} |
- return null; |
+ |
+ MediaDrmBridge media_drm_bridge = null; |
+ try { |
+ media_drm_bridge = new MediaDrmBridge( |
+ cryptoScheme, securityLevel, nativeMediaDrmBridge); |
+ } catch (android.media.UnsupportedSchemeException e) { |
+ Log.e(TAG, "Unsupported DRM scheme: " + e.toString()); |
+ } catch (java.lang.IllegalArgumentException e) { |
+ Log.e(TAG, "Failed to create MediaDrmBridge: " + e.toString()); |
+ } |
+ |
+ return media_drm_bridge; |
} |
/** |
@@ -167,6 +176,7 @@ class MediaDrmBridge { |
private void release() { |
if (mMediaCrypto != null) { |
mMediaCrypto.release(); |
+ mMediaCrypto = null; |
} |
if (mSessionId != null) { |
try { |
@@ -175,9 +185,12 @@ class MediaDrmBridge { |
} catch (java.io.UnsupportedEncodingException e) { |
Log.e(TAG, "Failed to close session: " + e.toString()); |
} |
+ mSessionId = null; |
+ } |
+ if (mMediaDrm != null) { |
+ mMediaDrm.release(); |
+ mMediaDrm = null; |
} |
- mMediaDrm.release(); |
- mMediaDrm = null; |
} |
/** |
@@ -329,6 +342,10 @@ class MediaDrmBridge { |
Log.e(TAG, "failed to provide provision response: " + e.toString()); |
onKeyError(); |
return; |
+ } catch (java.lang.IllegalStateException e) { |
+ Log.e(TAG, "failed to provide provision response: " + e.toString()); |
+ onKeyError(); |
+ return; |
} |
if (mPendingInitData != null) { |