Chromium Code Reviews| 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, |