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

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

Issue 2805803002: [Clank] Implement MediaDrmStorageBridge with MediaDrmStorage (Closed)
Patch Set: Rebase Created 3 years, 8 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_storage_bridge.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/android/media_drm_storage_bridge.cc
diff --git a/media/base/android/media_drm_storage_bridge.cc b/media/base/android/media_drm_storage_bridge.cc
index a9b6047c2c8a980e1346f7ae1f5925c88f979edb..8640ed607e3679a41d692b8065309e96182bc114 100644
--- a/media/base/android/media_drm_storage_bridge.cc
+++ b/media/base/android/media_drm_storage_bridge.cc
@@ -5,15 +5,26 @@
#include "media/base/android/media_drm_storage_bridge.h"
#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
#include "base/android/callback_android.h"
+#include "base/android/jni_array.h"
+#include "base/android/jni_string.h"
+#include "base/bind.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "jni/MediaDrmStorageBridge_jni.h"
+#include "media/base/android/android_util.h"
+using base::android::AttachCurrentThread;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::JavaByteArrayToByteVector;
using base::android::JavaParamRef;
using base::android::RunCallbackAndroid;
using base::android::ScopedJavaLocalRef;
+using base::android::ToJavaByteArray;
namespace media {
@@ -22,21 +33,30 @@ bool MediaDrmStorageBridge::RegisterMediaDrmStorageBridge(JNIEnv* env) {
return RegisterNativesImpl(env);
}
-MediaDrmStorageBridge::MediaDrmStorageBridge()
- : task_runner_(base::ThreadTaskRunnerHandle::Get()), weak_factory_(this) {}
+MediaDrmStorageBridge::MediaDrmStorageBridge(
+ const url::Origin& origin,
+ const CreateStorageCB& create_storage_cb)
+ : create_storage_cb_(create_storage_cb),
+ origin_(origin),
+ task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ weak_factory_(this) {}
MediaDrmStorageBridge::~MediaDrmStorageBridge() = default;
-// TODO(yucliu): Implement these methods with MediaDrmStorage
-
void MediaDrmStorageBridge::OnProvisioned(
JNIEnv* env,
const JavaParamRef<jobject>& j_storage,
// Callback<Boolean>
const JavaParamRef<jobject>& j_callback) {
- NOTIMPLEMENTED();
-
- RunCallbackAndroid(j_callback, true);
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ &MediaDrmStorage::OnProvisioned, GetStorageImpl()->AsWeakPtr(),
+ base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback,
+ // Bind callback to WeakPtr in case callback is called
+ // after object is deleted.
+ weak_factory_.GetWeakPtr(),
+ base::Passed(CreateJavaObjectPtr(j_callback.obj())))));
}
void MediaDrmStorageBridge::OnLoadInfo(
@@ -45,9 +65,16 @@ void MediaDrmStorageBridge::OnLoadInfo(
const JavaParamRef<jbyteArray>& j_session_id,
// Callback<PersistentInfo>
const JavaParamRef<jobject>& j_callback) {
- NOTIMPLEMENTED();
-
- RunCallbackAndroid(j_callback, ScopedJavaLocalRef<jobject>());
+ std::string session_id = JavaBytesToString(env, j_session_id);
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ &MediaDrmStorage::LoadPersistentSession,
+ GetStorageImpl()->AsWeakPtr(), session_id,
+ base::BindOnce(&MediaDrmStorageBridge::OnSessionDataLoaded,
+ weak_factory_.GetWeakPtr(),
+ base::Passed(CreateJavaObjectPtr(j_callback.obj())),
+ session_id)));
}
void MediaDrmStorageBridge::OnSaveInfo(
@@ -56,9 +83,26 @@ void MediaDrmStorageBridge::OnSaveInfo(
const JavaParamRef<jobject>& j_persist_info,
// Callback<Boolean>
const JavaParamRef<jobject>& j_callback) {
- NOTIMPLEMENTED();
-
- RunCallbackAndroid(j_callback, false);
+ std::vector<uint8_t> key_set_id;
+ JavaByteArrayToByteVector(
+ env, Java_PersistentInfo_keySetId(env, j_persist_info.obj()).obj(),
+ &key_set_id);
+
+ std::string mime = ConvertJavaStringToUTF8(
+ env, Java_PersistentInfo_mimeType(env, j_persist_info.obj()));
+
+ std::string session_id = JavaBytesToString(
+ env, Java_PersistentInfo_emeId(env, j_persist_info.obj()).obj());
+
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ &MediaDrmStorage::SavePersistentSession,
+ GetStorageImpl()->AsWeakPtr(), session_id,
+ MediaDrmStorage::SessionData(std::move(key_set_id), std::move(mime)),
+ base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback,
+ weak_factory_.GetWeakPtr(),
+ base::Passed(CreateJavaObjectPtr(j_callback.obj())))));
}
void MediaDrmStorageBridge::OnClearInfo(
@@ -67,8 +111,49 @@ void MediaDrmStorageBridge::OnClearInfo(
const JavaParamRef<jbyteArray>& j_session_id,
// Callback<Boolean>
const JavaParamRef<jobject>& j_callback) {
- NOTIMPLEMENTED();
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(
+ &MediaDrmStorage::RemovePersistentSession,
+ GetStorageImpl()->AsWeakPtr(), JavaBytesToString(env, j_session_id),
+ base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback,
+ weak_factory_.GetWeakPtr(),
+ base::Passed(CreateJavaObjectPtr(j_callback.obj())))));
+}
- RunCallbackAndroid(j_callback, false);
+void MediaDrmStorageBridge::RunAndroidBoolCallback(JavaObjectPtr j_callback,
+ bool success) {
+ RunCallbackAndroid(*j_callback, success);
}
+
+void MediaDrmStorageBridge::OnSessionDataLoaded(
+ JavaObjectPtr j_callback,
+ const std::string& session_id,
+ std::unique_ptr<MediaDrmStorage::SessionData> session_data) {
+ if (!session_data) {
+ RunCallbackAndroid(*j_callback, ScopedJavaLocalRef<jobject>());
+ return;
+ }
+
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jbyteArray> j_eme_id = StringToJavaBytes(env, session_id);
+ ScopedJavaLocalRef<jbyteArray> j_key_set_id = ToJavaByteArray(
+ env, session_data->key_set_id.data(), session_data->key_set_id.size());
+ ScopedJavaLocalRef<jstring> j_mime =
+ ConvertUTF8ToJavaString(env, session_data->mime_type);
+
+ RunCallbackAndroid(*j_callback, Java_PersistentInfo_create(
+ env, j_eme_id, j_key_set_id, j_mime));
+}
+
+MediaDrmStorage* MediaDrmStorageBridge::GetStorageImpl() {
+ if (!impl_) {
+ DCHECK(create_storage_cb_);
+ impl_ = std::move(create_storage_cb_).Run();
+ impl_->Initialize(origin_);
+ }
+
+ return impl_.get();
+}
+
} // namespace media
« no previous file with comments | « media/base/android/media_drm_storage_bridge.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698