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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « media/base/android/media_drm_storage_bridge.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/base/android/media_drm_storage_bridge.h" 5 #include "media/base/android/media_drm_storage_bridge.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string>
9 #include <utility>
10 #include <vector>
8 11
9 #include "base/android/callback_android.h" 12 #include "base/android/callback_android.h"
13 #include "base/android/jni_array.h"
14 #include "base/android/jni_string.h"
15 #include "base/bind.h"
10 #include "base/single_thread_task_runner.h" 16 #include "base/single_thread_task_runner.h"
11 #include "base/threading/thread_task_runner_handle.h" 17 #include "base/threading/thread_task_runner_handle.h"
12 #include "jni/MediaDrmStorageBridge_jni.h" 18 #include "jni/MediaDrmStorageBridge_jni.h"
19 #include "media/base/android/android_util.h"
13 20
21 using base::android::AttachCurrentThread;
22 using base::android::ConvertUTF8ToJavaString;
23 using base::android::JavaByteArrayToByteVector;
14 using base::android::JavaParamRef; 24 using base::android::JavaParamRef;
15 using base::android::RunCallbackAndroid; 25 using base::android::RunCallbackAndroid;
16 using base::android::ScopedJavaLocalRef; 26 using base::android::ScopedJavaLocalRef;
27 using base::android::ToJavaByteArray;
17 28
18 namespace media { 29 namespace media {
19 30
20 // static 31 // static
21 bool MediaDrmStorageBridge::RegisterMediaDrmStorageBridge(JNIEnv* env) { 32 bool MediaDrmStorageBridge::RegisterMediaDrmStorageBridge(JNIEnv* env) {
22 return RegisterNativesImpl(env); 33 return RegisterNativesImpl(env);
23 } 34 }
24 35
25 MediaDrmStorageBridge::MediaDrmStorageBridge() 36 MediaDrmStorageBridge::MediaDrmStorageBridge(
26 : task_runner_(base::ThreadTaskRunnerHandle::Get()), weak_factory_(this) {} 37 const url::Origin& origin,
38 const CreateStorageCB& create_storage_cb)
39 : create_storage_cb_(create_storage_cb),
40 origin_(origin),
41 task_runner_(base::ThreadTaskRunnerHandle::Get()),
42 weak_factory_(this) {}
27 43
28 MediaDrmStorageBridge::~MediaDrmStorageBridge() = default; 44 MediaDrmStorageBridge::~MediaDrmStorageBridge() = default;
29 45
30 // TODO(yucliu): Implement these methods with MediaDrmStorage
31
32 void MediaDrmStorageBridge::OnProvisioned( 46 void MediaDrmStorageBridge::OnProvisioned(
33 JNIEnv* env, 47 JNIEnv* env,
34 const JavaParamRef<jobject>& j_storage, 48 const JavaParamRef<jobject>& j_storage,
35 // Callback<Boolean> 49 // Callback<Boolean>
36 const JavaParamRef<jobject>& j_callback) { 50 const JavaParamRef<jobject>& j_callback) {
37 NOTIMPLEMENTED(); 51 task_runner_->PostTask(
38 52 FROM_HERE,
39 RunCallbackAndroid(j_callback, true); 53 base::BindOnce(
54 &MediaDrmStorage::OnProvisioned, GetStorageImpl()->AsWeakPtr(),
55 base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback,
56 // Bind callback to WeakPtr in case callback is called
57 // after object is deleted.
58 weak_factory_.GetWeakPtr(),
59 base::Passed(CreateJavaObjectPtr(j_callback.obj())))));
40 } 60 }
41 61
42 void MediaDrmStorageBridge::OnLoadInfo( 62 void MediaDrmStorageBridge::OnLoadInfo(
43 JNIEnv* env, 63 JNIEnv* env,
44 const JavaParamRef<jobject>& j_storage, 64 const JavaParamRef<jobject>& j_storage,
45 const JavaParamRef<jbyteArray>& j_session_id, 65 const JavaParamRef<jbyteArray>& j_session_id,
46 // Callback<PersistentInfo> 66 // Callback<PersistentInfo>
47 const JavaParamRef<jobject>& j_callback) { 67 const JavaParamRef<jobject>& j_callback) {
48 NOTIMPLEMENTED(); 68 std::string session_id = JavaBytesToString(env, j_session_id);
49 69 task_runner_->PostTask(
50 RunCallbackAndroid(j_callback, ScopedJavaLocalRef<jobject>()); 70 FROM_HERE,
71 base::BindOnce(
72 &MediaDrmStorage::LoadPersistentSession,
73 GetStorageImpl()->AsWeakPtr(), session_id,
74 base::BindOnce(&MediaDrmStorageBridge::OnSessionDataLoaded,
75 weak_factory_.GetWeakPtr(),
76 base::Passed(CreateJavaObjectPtr(j_callback.obj())),
77 session_id)));
51 } 78 }
52 79
53 void MediaDrmStorageBridge::OnSaveInfo( 80 void MediaDrmStorageBridge::OnSaveInfo(
54 JNIEnv* env, 81 JNIEnv* env,
55 const JavaParamRef<jobject>& j_storage, 82 const JavaParamRef<jobject>& j_storage,
56 const JavaParamRef<jobject>& j_persist_info, 83 const JavaParamRef<jobject>& j_persist_info,
57 // Callback<Boolean> 84 // Callback<Boolean>
58 const JavaParamRef<jobject>& j_callback) { 85 const JavaParamRef<jobject>& j_callback) {
59 NOTIMPLEMENTED(); 86 std::vector<uint8_t> key_set_id;
87 JavaByteArrayToByteVector(
88 env, Java_PersistentInfo_keySetId(env, j_persist_info.obj()).obj(),
89 &key_set_id);
60 90
61 RunCallbackAndroid(j_callback, false); 91 std::string mime = ConvertJavaStringToUTF8(
92 env, Java_PersistentInfo_mimeType(env, j_persist_info.obj()));
93
94 std::string session_id = JavaBytesToString(
95 env, Java_PersistentInfo_emeId(env, j_persist_info.obj()).obj());
96
97 task_runner_->PostTask(
98 FROM_HERE,
99 base::BindOnce(
100 &MediaDrmStorage::SavePersistentSession,
101 GetStorageImpl()->AsWeakPtr(), session_id,
102 MediaDrmStorage::SessionData(std::move(key_set_id), std::move(mime)),
103 base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback,
104 weak_factory_.GetWeakPtr(),
105 base::Passed(CreateJavaObjectPtr(j_callback.obj())))));
62 } 106 }
63 107
64 void MediaDrmStorageBridge::OnClearInfo( 108 void MediaDrmStorageBridge::OnClearInfo(
65 JNIEnv* env, 109 JNIEnv* env,
66 const JavaParamRef<jobject>& j_storage, 110 const JavaParamRef<jobject>& j_storage,
67 const JavaParamRef<jbyteArray>& j_session_id, 111 const JavaParamRef<jbyteArray>& j_session_id,
68 // Callback<Boolean> 112 // Callback<Boolean>
69 const JavaParamRef<jobject>& j_callback) { 113 const JavaParamRef<jobject>& j_callback) {
70 NOTIMPLEMENTED(); 114 task_runner_->PostTask(
115 FROM_HERE,
116 base::BindOnce(
117 &MediaDrmStorage::RemovePersistentSession,
118 GetStorageImpl()->AsWeakPtr(), JavaBytesToString(env, j_session_id),
119 base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback,
120 weak_factory_.GetWeakPtr(),
121 base::Passed(CreateJavaObjectPtr(j_callback.obj())))));
122 }
71 123
72 RunCallbackAndroid(j_callback, false); 124 void MediaDrmStorageBridge::RunAndroidBoolCallback(JavaObjectPtr j_callback,
125 bool success) {
126 RunCallbackAndroid(*j_callback, success);
73 } 127 }
128
129 void MediaDrmStorageBridge::OnSessionDataLoaded(
130 JavaObjectPtr j_callback,
131 const std::string& session_id,
132 std::unique_ptr<MediaDrmStorage::SessionData> session_data) {
133 if (!session_data) {
134 RunCallbackAndroid(*j_callback, ScopedJavaLocalRef<jobject>());
135 return;
136 }
137
138 JNIEnv* env = AttachCurrentThread();
139 ScopedJavaLocalRef<jbyteArray> j_eme_id = StringToJavaBytes(env, session_id);
140 ScopedJavaLocalRef<jbyteArray> j_key_set_id = ToJavaByteArray(
141 env, session_data->key_set_id.data(), session_data->key_set_id.size());
142 ScopedJavaLocalRef<jstring> j_mime =
143 ConvertUTF8ToJavaString(env, session_data->mime_type);
144
145 RunCallbackAndroid(*j_callback, Java_PersistentInfo_create(
146 env, j_eme_id, j_key_set_id, j_mime));
147 }
148
149 MediaDrmStorage* MediaDrmStorageBridge::GetStorageImpl() {
150 if (!impl_) {
151 DCHECK(create_storage_cb_);
152 impl_ = std::move(create_storage_cb_).Run();
153 impl_->Initialize(origin_);
154 }
155
156 return impl_.get();
157 }
158
74 } // namespace media 159 } // namespace media
OLDNEW
« 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