Index: media/base/android/media_drm_bridge.cc |
diff --git a/media/base/android/media_drm_bridge.cc b/media/base/android/media_drm_bridge.cc |
index 7c6c25a98e9a091f8ec07ddb9db45d06268de007..d6c79038d9a549fb624eec8989649f4bccccc7b4 100644 |
--- a/media/base/android/media_drm_bridge.cc |
+++ b/media/base/android/media_drm_bridge.cc |
@@ -152,16 +152,22 @@ static MediaDrmBridge::SecurityLevel GetSecurityLevelFromString( |
} |
// static |
-MediaDrmBridge* MediaDrmBridge::Create(int media_keys_id, |
- const std::vector<uint8>& scheme_uuid, |
- const std::string& security_level, |
- MediaPlayerManager* manager) { |
- if (!IsAvailable() || scheme_uuid.empty()) |
- return NULL; |
- |
- // TODO(qinmin): check whether the uuid is valid. |
- return new MediaDrmBridge( |
- media_keys_id, scheme_uuid, security_level, manager); |
+scoped_ptr<MediaDrmBridge> MediaDrmBridge::Create( |
+ int media_keys_id, |
+ const std::vector<uint8>& scheme_uuid, |
+ const std::string& security_level, |
+ MediaPlayerManager* manager) { |
+ scoped_ptr<MediaDrmBridge> media_drm_bridge; |
+ |
+ if (IsAvailable() && !scheme_uuid.empty()) { |
+ // TODO(qinmin): check whether the uuid is valid. |
+ media_drm_bridge.reset( |
+ new MediaDrmBridge(media_keys_id, scheme_uuid, security_level, manager)); |
+ if (media_drm_bridge->j_media_drm_.is_null()) |
+ media_drm_bridge.reset(); |
+ } |
+ |
+ return media_drm_bridge.Pass(); |
} |
// static |
@@ -213,7 +219,10 @@ MediaDrmBridge::MediaDrmBridge(int media_keys_id, |
MediaDrmBridge::~MediaDrmBridge() { |
JNIEnv* env = AttachCurrentThread(); |
- Java_MediaDrmBridge_release(env, j_media_drm_.obj()); |
+ if (!j_media_drm_.is_null()) { |
+ Java_MediaDrmBridge_release(env, j_media_drm_.obj()); |
+ j_media_drm_.Reset(); |
qinmin
2013/09/05 22:15:31
ScopedJavaGlobalRef will do this for you
xhwang
2013/09/06 02:17:47
Done.
|
+ } |
} |
bool MediaDrmBridge::GenerateKeyRequest(const std::string& type, |