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 8640ed607e3679a41d692b8065309e96182bc114..abfea884dc21a02943d9642705570fc75e8c5588 100644 |
--- a/media/base/android/media_drm_storage_bridge.cc |
+++ b/media/base/android/media_drm_storage_bridge.cc |
@@ -33,25 +33,35 @@ bool MediaDrmStorageBridge::RegisterMediaDrmStorageBridge(JNIEnv* env) { |
return RegisterNativesImpl(env); |
} |
-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() |
+ : task_runner_(base::ThreadTaskRunnerHandle::Get()), weak_factory_(this) {} |
MediaDrmStorageBridge::~MediaDrmStorageBridge() = default; |
+void MediaDrmStorageBridge::Initialize(const url::Origin& origin, |
+ const CreateStorageCB& create_storage_cb, |
+ base::OnceClosure on_init) { |
+ DCHECK(create_storage_cb); |
+ impl_ = create_storage_cb.Run(); |
+ |
+ // TODO(yucliu): MediaDrmStorage should generate and return origin id |
+ // asynchronously in a callback. |
+ impl_->Initialize(origin); |
+ origin_id_ = origin.Serialize(); |
+ |
+ std::move(on_init).Run(); |
+} |
+ |
void MediaDrmStorageBridge::OnProvisioned( |
JNIEnv* env, |
const JavaParamRef<jobject>& j_storage, |
// Callback<Boolean> |
const JavaParamRef<jobject>& j_callback) { |
+ DCHECK(impl_); |
task_runner_->PostTask( |
FROM_HERE, |
base::BindOnce( |
- &MediaDrmStorage::OnProvisioned, GetStorageImpl()->AsWeakPtr(), |
+ &MediaDrmStorage::OnProvisioned, impl_->AsWeakPtr(), |
base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback, |
// Bind callback to WeakPtr in case callback is called |
// after object is deleted. |
@@ -65,12 +75,13 @@ void MediaDrmStorageBridge::OnLoadInfo( |
const JavaParamRef<jbyteArray>& j_session_id, |
// Callback<PersistentInfo> |
const JavaParamRef<jobject>& j_callback) { |
+ DCHECK(impl_); |
std::string session_id = JavaBytesToString(env, j_session_id); |
task_runner_->PostTask( |
FROM_HERE, |
base::BindOnce( |
- &MediaDrmStorage::LoadPersistentSession, |
- GetStorageImpl()->AsWeakPtr(), session_id, |
+ &MediaDrmStorage::LoadPersistentSession, impl_->AsWeakPtr(), |
+ session_id, |
base::BindOnce(&MediaDrmStorageBridge::OnSessionDataLoaded, |
weak_factory_.GetWeakPtr(), |
base::Passed(CreateJavaObjectPtr(j_callback.obj())), |
@@ -83,6 +94,7 @@ void MediaDrmStorageBridge::OnSaveInfo( |
const JavaParamRef<jobject>& j_persist_info, |
// Callback<Boolean> |
const JavaParamRef<jobject>& j_callback) { |
+ DCHECK(impl_); |
std::vector<uint8_t> key_set_id; |
JavaByteArrayToByteVector( |
env, Java_PersistentInfo_keySetId(env, j_persist_info.obj()).obj(), |
@@ -97,8 +109,8 @@ void MediaDrmStorageBridge::OnSaveInfo( |
task_runner_->PostTask( |
FROM_HERE, |
base::BindOnce( |
- &MediaDrmStorage::SavePersistentSession, |
- GetStorageImpl()->AsWeakPtr(), session_id, |
+ &MediaDrmStorage::SavePersistentSession, impl_->AsWeakPtr(), |
+ session_id, |
MediaDrmStorage::SessionData(std::move(key_set_id), std::move(mime)), |
base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback, |
weak_factory_.GetWeakPtr(), |
@@ -111,11 +123,12 @@ void MediaDrmStorageBridge::OnClearInfo( |
const JavaParamRef<jbyteArray>& j_session_id, |
// Callback<Boolean> |
const JavaParamRef<jobject>& j_callback) { |
+ DCHECK(impl_); |
task_runner_->PostTask( |
FROM_HERE, |
base::BindOnce( |
- &MediaDrmStorage::RemovePersistentSession, |
- GetStorageImpl()->AsWeakPtr(), JavaBytesToString(env, j_session_id), |
+ &MediaDrmStorage::RemovePersistentSession, impl_->AsWeakPtr(), |
+ JavaBytesToString(env, j_session_id), |
base::BindOnce(&MediaDrmStorageBridge::RunAndroidBoolCallback, |
weak_factory_.GetWeakPtr(), |
base::Passed(CreateJavaObjectPtr(j_callback.obj()))))); |
@@ -146,14 +159,4 @@ void MediaDrmStorageBridge::OnSessionDataLoaded( |
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 |