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 dbcd1871b81b542ade6750b9b5247366dba2758a..ab66dfd9aae4d9eb9886934bea64dde6e4403ab0 100644 |
| --- a/media/base/android/media_drm_bridge.cc |
| +++ b/media/base/android/media_drm_bridge.cc |
| @@ -15,7 +15,6 @@ |
| #include "base/message_loop/message_loop_proxy.h" |
| #include "base/strings/string_util.h" |
| #include "jni/MediaDrmBridge_jni.h" |
| -#include "media/base/android/media_player_manager.h" |
| #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. |
| @@ -223,10 +222,8 @@ bool MediaDrmBridge::IsSecurityLevelSupported(const std::string& key_system, |
| if (!IsAvailable()) |
| return false; |
| - // Pass 0 as |cdm_id| and NULL as |manager| as they are not used in |
| - // creation time of MediaDrmBridge. |
| scoped_ptr<MediaDrmBridge> media_drm_bridge = |
| - MediaDrmBridge::Create(0, key_system, GURL(), NULL); |
| + MediaDrmBridge::Create(key_system); |
| if (!media_drm_bridge) |
| return false; |
| @@ -251,14 +248,18 @@ bool MediaDrmBridge::RegisterMediaDrmBridge(JNIEnv* env) { |
| return RegisterNativesImpl(env); |
| } |
| -MediaDrmBridge::MediaDrmBridge(int cdm_id, |
| - const std::vector<uint8>& scheme_uuid, |
| - const GURL& security_origin, |
| - MediaPlayerManager* manager) |
| - : cdm_id_(cdm_id), |
| - scheme_uuid_(scheme_uuid), |
| - security_origin_(security_origin), |
| - manager_(manager) { |
| +MediaDrmBridge::MediaDrmBridge(const std::vector<uint8>& scheme_uuid, |
| + const SessionCreatedCB& session_created_cb, |
| + const SessionMessageCB& session_message_cb, |
| + const SessionReadyCB& session_ready_cb, |
| + const SessionClosedCB& session_closed_cb, |
| + const SessionErrorCB& session_error_cb) |
| + : scheme_uuid_(scheme_uuid), |
| + session_created_cb_(session_created_cb), |
| + session_message_cb_(session_message_cb), |
| + session_ready_cb_(session_ready_cb), |
| + session_closed_cb_(session_closed_cb), |
| + session_error_cb_(session_error_cb) { |
| JNIEnv* env = AttachCurrentThread(); |
| CHECK(env); |
| @@ -275,10 +276,13 @@ MediaDrmBridge::~MediaDrmBridge() { |
| } |
| // static |
| -scoped_ptr<MediaDrmBridge> MediaDrmBridge::Create(int cdm_id, |
| - const std::string& key_system, |
| - const GURL& security_origin, |
| - MediaPlayerManager* manager) { |
| +scoped_ptr<MediaDrmBridge> MediaDrmBridge::Create( |
| + const std::string& key_system, |
| + const SessionCreatedCB& session_created_cb, |
| + const SessionMessageCB& session_message_cb, |
| + const SessionReadyCB& session_ready_cb, |
| + const SessionClosedCB& session_closed_cb, |
| + const SessionErrorCB& session_error_cb) { |
| scoped_ptr<MediaDrmBridge> media_drm_bridge; |
| if (!IsAvailable()) |
| return media_drm_bridge.Pass(); |
| @@ -287,14 +291,30 @@ scoped_ptr<MediaDrmBridge> MediaDrmBridge::Create(int cdm_id, |
| if (scheme_uuid.empty()) |
| return media_drm_bridge.Pass(); |
| - media_drm_bridge.reset( |
| - new MediaDrmBridge(cdm_id, scheme_uuid, security_origin, manager)); |
| + media_drm_bridge.reset(new MediaDrmBridge(scheme_uuid, |
| + session_created_cb, |
| + session_message_cb, |
| + session_ready_cb, |
| + session_closed_cb, |
| + session_error_cb)); |
| + |
| if (media_drm_bridge->j_media_drm_.is_null()) |
| media_drm_bridge.reset(); |
| return media_drm_bridge.Pass(); |
| } |
| +//static |
| +scoped_ptr<MediaDrmBridge> MediaDrmBridge::Create( |
| + const std::string& key_system) { |
| + return MediaDrmBridge::Create(key_system, |
| + SessionCreatedCB(), |
| + SessionMessageCB(), |
| + SessionReadyCB(), |
| + SessionClosedCB(), |
| + SessionErrorCB()); |
| +} |
| + |
| bool MediaDrmBridge::SetSecurityLevel(SecurityLevel security_level) { |
| JNIEnv* env = AttachCurrentThread(); |
| @@ -312,6 +332,8 @@ bool MediaDrmBridge::CreateSession(uint32 session_id, |
| const std::string& content_type, |
| const uint8* init_data, |
| int init_data_length) { |
| + DCHECK(!session_created_cb_.is_null()); |
|
damienv1
2014/05/12 23:14:26
We should have all these DCHECK in the constructor
ddorwin
2014/05/13 00:59:38
I assume this is to make sure that this is not cal
xhwang
2014/05/14 16:42:06
Done.
|
| + |
| JNIEnv* env = AttachCurrentThread(); |
| ScopedJavaLocalRef<jbyteArray> j_init_data; |
| // Caller should always use "video/*" content types. |
| @@ -389,7 +411,7 @@ void MediaDrmBridge::OnSessionCreated(JNIEnv* env, |
| jstring j_web_session_id) { |
| uint32 session_id = j_session_id; |
| std::string web_session_id = ConvertJavaStringToUTF8(env, j_web_session_id); |
| - manager_->OnSessionCreated(cdm_id_, session_id, web_session_id); |
| + session_created_cb_.Run(session_id, web_session_id); |
| } |
| void MediaDrmBridge::OnSessionMessage(JNIEnv* env, |
| @@ -401,35 +423,28 @@ void MediaDrmBridge::OnSessionMessage(JNIEnv* env, |
| std::vector<uint8> message; |
| JavaByteArrayToByteVector(env, j_message, &message); |
| std::string destination_url = ConvertJavaStringToUTF8(env, j_destination_url); |
| - GURL destination_gurl(destination_url); |
| - if (!destination_gurl.is_valid() && !destination_gurl.is_empty()) { |
| - DLOG(WARNING) << "SessionMessage destination_url is invalid : " |
| - << destination_gurl.possibly_invalid_spec(); |
| - destination_gurl = GURL::EmptyGURL(); // Replace invalid destination_url. |
| - } |
| - |
| - manager_->OnSessionMessage(cdm_id_, session_id, message, destination_gurl); |
| + session_message_cb_.Run(session_id, message, destination_url); |
|
ddorwin
2014/05/13 00:59:38
Ahh, did you make that GURL->string change because
xhwang
2014/05/14 16:42:06
yes :) I filed a bug to fix this.
|
| } |
| void MediaDrmBridge::OnSessionReady(JNIEnv* env, |
| jobject j_media_drm, |
| jint j_session_id) { |
| uint32 session_id = j_session_id; |
| - manager_->OnSessionReady(cdm_id_, session_id); |
| + session_ready_cb_.Run(session_id); |
| } |
| void MediaDrmBridge::OnSessionClosed(JNIEnv* env, |
| jobject j_media_drm, |
| jint j_session_id) { |
| uint32 session_id = j_session_id; |
| - manager_->OnSessionClosed(cdm_id_, session_id); |
| + session_closed_cb_.Run(session_id); |
| } |
| void MediaDrmBridge::OnSessionError(JNIEnv* env, |
| jobject j_media_drm, |
| jint j_session_id) { |
| uint32 session_id = j_session_id; |
| - manager_->OnSessionError(cdm_id_, session_id, MediaKeys::kUnknownError, 0); |
| + session_error_cb_.Run(session_id, MediaKeys::kUnknownError, 0); |
| } |
| ScopedJavaLocalRef<jobject> MediaDrmBridge::GetMediaCrypto() { |