| 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..b6272596c74d5cd6a7765d0ec35365f83c7ef9b0 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::CreateSessionless(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::CreateSessionless(
|
| + 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,11 @@ bool MediaDrmBridge::CreateSession(uint32 session_id,
|
| const std::string& content_type,
|
| const uint8* init_data,
|
| int init_data_length) {
|
| + DVLOG(1) << __FUNCTION__;
|
| +
|
| + DCHECK(!session_created_cb_.is_null())
|
| + << "CreateSession called on a sessionless MediaDrmBridge object.";
|
| +
|
| JNIEnv* env = AttachCurrentThread();
|
| ScopedJavaLocalRef<jbyteArray> j_init_data;
|
| // Caller should always use "video/*" content types.
|
| @@ -348,6 +373,10 @@ void MediaDrmBridge::UpdateSession(uint32 session_id,
|
| const uint8* response,
|
| int response_length) {
|
| DVLOG(1) << __FUNCTION__;
|
| +
|
| + DCHECK(!session_ready_cb_.is_null())
|
| + << __FUNCTION__ << " called on a sessionless MediaDrmBridge object.";
|
| +
|
| JNIEnv* env = AttachCurrentThread();
|
| ScopedJavaLocalRef<jbyteArray> j_response =
|
| base::android::ToJavaByteArray(env, response, response_length);
|
| @@ -357,6 +386,10 @@ void MediaDrmBridge::UpdateSession(uint32 session_id,
|
|
|
| void MediaDrmBridge::ReleaseSession(uint32 session_id) {
|
| DVLOG(1) << __FUNCTION__;
|
| +
|
| + DCHECK(!session_closed_cb_.is_null())
|
| + << __FUNCTION__ << " called on a sessionless MediaDrmBridge object.";
|
| +
|
| JNIEnv* env = AttachCurrentThread();
|
| Java_MediaDrmBridge_releaseSession(env, j_media_drm_.obj(), session_id);
|
| }
|
| @@ -389,7 +422,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 +434,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);
|
| }
|
|
|
| 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() {
|
|
|