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

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

Issue 1512173003: media: Refactor MediaCrypto creation and notification. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
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 7e63815c60fbd50631a662f76caecc0527b4da58..bec130fb143318bd74a9e85b3a97b930281a3a80 100644
--- a/media/base/android/media_drm_bridge.cc
+++ b/media/base/android/media_drm_bridge.cc
@@ -492,11 +492,9 @@ void MediaDrmBridge::RejectPromise(uint32_t promise_id,
error_message);
}
-ScopedJavaLocalRef<jobject> MediaDrmBridge::GetMediaCrypto() {
+jobject MediaDrmBridge::GetMediaCrypto() {
DCHECK(task_runner_->BelongsToCurrentThread());
-
- JNIEnv* env = AttachCurrentThread();
- return Java_MediaDrmBridge_getMediaCrypto(env, j_media_drm_.obj());
+ return j_media_crypto_->obj();
}
void MediaDrmBridge::SetMediaCryptoReadyCB(
@@ -517,15 +515,14 @@ void MediaDrmBridge::SetMediaCryptoReadyCB(
}
DCHECK(media_crypto_ready_cb_.is_null());
+ media_crypto_ready_cb_ = media_crypto_ready_cb;
- // |media_crypto_ready_cb| is already bound to the correct thread
- // (either UI or Media).
- if (!GetMediaCrypto().is_null()) {
- NotifyMediaCryptoReady(media_crypto_ready_cb);
+ if (!j_media_crypto_)
return;
- }
- media_crypto_ready_cb_ = media_crypto_ready_cb;
+ base::ResetAndReturn(&media_crypto_ready_cb_)
+ .Run(CreateJavaObjectPtr(j_media_crypto_->obj()),
+ IsProtectedSurfaceRequired());
}
//------------------------------------------------------------------------------
@@ -534,17 +531,16 @@ void MediaDrmBridge::SetMediaCryptoReadyCB(
void MediaDrmBridge::OnMediaCryptoReady(
JNIEnv* env,
- const JavaParamRef<jobject>& j_media_drm) {
+ const JavaParamRef<jobject>& j_media_drm,
+ const JavaParamRef<jobject>& j_media_crypto) {
DCHECK(task_runner_->BelongsToCurrentThread());
DVLOG(1) << __FUNCTION__;
- if (media_crypto_ready_cb_.is_null())
- return;
-
task_runner_->PostTask(
- FROM_HERE, base::Bind(&MediaDrmBridge::NotifyMediaCryptoReady,
- weak_factory_.GetWeakPtr(),
- base::ResetAndReturn(&media_crypto_ready_cb_)));
+ FROM_HERE,
+ base::Bind(&MediaDrmBridge::NotifyMediaCryptoReady,
+ weak_factory_.GetWeakPtr(),
+ base::Passed(CreateJavaObjectPtr(j_media_crypto.obj()))));
}
void MediaDrmBridge::OnStartProvisioning(
@@ -779,18 +775,29 @@ MediaDrmBridge::SecurityLevel MediaDrmBridge::GetSecurityLevel() {
return GetSecurityLevelFromString(security_level_str);
}
-void MediaDrmBridge::NotifyMediaCryptoReady(const MediaCryptoReadyCB& cb) {
+// We have to use scoped_ptr to pass ScopedJavaGlobalRef with a callback.
+// TODO(timav): Check whether we can simply pass j_media_crypto_->obj() in the
+// callback.
+MediaDrmBridge::JavaObjectPtr MediaDrmBridge::CreateJavaObjectPtr(
+ jobject object) {
+ JavaObjectPtr j_object_ptr(new ScopedJavaGlobalRef<jobject>());
+ j_object_ptr->Reset(AttachCurrentThread(), object);
+ return std::move(j_object_ptr);
+}
+
+void MediaDrmBridge::NotifyMediaCryptoReady(JavaObjectPtr j_media_crypto) {
DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(j_media_crypto);
+ DCHECK(!j_media_crypto_);
- DCHECK(!cb.is_null());
- DCHECK(!GetMediaCrypto().is_null());
+ j_media_crypto_ = std::move(j_media_crypto);
- // We can use scoped_ptr to pass ScopedJavaGlobalRef with a callback.
- scoped_ptr<ScopedJavaGlobalRef<jobject>> j_object_ptr(
- new ScopedJavaGlobalRef<jobject>());
- j_object_ptr->Reset(AttachCurrentThread(), GetMediaCrypto().obj());
+ if (media_crypto_ready_cb_.is_null())
+ return;
- cb.Run(j_object_ptr.Pass(), IsProtectedSurfaceRequired());
+ base::ResetAndReturn(&media_crypto_ready_cb_)
+ .Run(CreateJavaObjectPtr(j_media_crypto_->obj()),
+ IsProtectedSurfaceRequired());
}
void MediaDrmBridge::SendProvisioningRequest(const std::string& default_url,

Powered by Google App Engine
This is Rietveld 408576698