Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(812)

Unified Diff: media/base/android/media_drm_bridge.cc

Issue 276973005: BrowserMediaPlayerManager manages MediaKeys objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments addressed Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/android/media_drm_bridge.h ('k') | media/base/android/media_player_android.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « media/base/android/media_drm_bridge.h ('k') | media/base/android/media_player_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698