OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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_bridge.h" | 5 #include "media/base/android/media_drm_bridge.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | |
9 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <utility> |
10 | 10 |
11 #include "base/android/build_info.h" | 11 #include "base/android/build_info.h" |
12 #include "base/android/jni_array.h" | 12 #include "base/android/jni_array.h" |
13 #include "base/android/jni_string.h" | 13 #include "base/android/jni_string.h" |
14 #include "base/bind.h" | 14 #include "base/bind.h" |
15 #include "base/callback_helpers.h" | 15 #include "base/callback_helpers.h" |
16 #include "base/containers/hash_tables.h" | 16 #include "base/containers/hash_tables.h" |
17 #include "base/lazy_instance.h" | 17 #include "base/lazy_instance.h" |
18 #include "base/location.h" | 18 #include "base/location.h" |
19 #include "base/logging.h" | 19 #include "base/logging.h" |
20 #include "base/macros.h" | 20 #include "base/macros.h" |
21 #include "base/single_thread_task_runner.h" | 21 #include "base/single_thread_task_runner.h" |
22 #include "base/strings/string_number_conversions.h" | 22 #include "base/strings/string_number_conversions.h" |
23 #include "base/strings/string_util.h" | 23 #include "base/strings/string_util.h" |
24 #include "base/sys_byteorder.h" | 24 #include "base/sys_byteorder.h" |
25 #include "base/sys_info.h" | 25 #include "base/sys_info.h" |
26 #include "base/thread_task_runner_handle.h" | 26 #include "base/thread_task_runner_handle.h" |
27 #include "jni/MediaDrmBridge_jni.h" | 27 #include "jni/MediaDrmBridge_jni.h" |
28 #include "media/base/android/media_client_android.h" | 28 #include "media/base/android/media_client_android.h" |
29 #include "media/base/android/media_drm_bridge_delegate.h" | 29 #include "media/base/android/media_drm_bridge_delegate.h" |
30 #include "media/base/android/provision_fetcher.h" | 30 #include "media/base/android/provision_fetcher.h" |
31 #include "media/base/cdm_key_information.h" | 31 #include "media/base/cdm_key_information.h" |
32 | |
33 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. | 32 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. |
34 | 33 |
35 using base::android::AttachCurrentThread; | 34 using base::android::AttachCurrentThread; |
36 using base::android::ConvertUTF8ToJavaString; | 35 using base::android::ConvertUTF8ToJavaString; |
37 using base::android::ConvertJavaStringToUTF8; | 36 using base::android::ConvertJavaStringToUTF8; |
38 using base::android::JavaByteArrayToByteVector; | 37 using base::android::JavaByteArrayToByteVector; |
39 using base::android::ScopedJavaGlobalRef; | 38 using base::android::ScopedJavaGlobalRef; |
40 using base::android::ScopedJavaLocalRef; | 39 using base::android::ScopedJavaLocalRef; |
41 | 40 |
42 namespace media { | 41 namespace media { |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 } | 357 } |
359 } | 358 } |
360 | 359 |
361 if (j_init_data.is_null()) { | 360 if (j_init_data.is_null()) { |
362 j_init_data = | 361 j_init_data = |
363 base::android::ToJavaByteArray(env, init_data.data(), init_data.size()); | 362 base::android::ToJavaByteArray(env, init_data.data(), init_data.size()); |
364 } | 363 } |
365 | 364 |
366 ScopedJavaLocalRef<jstring> j_mime = | 365 ScopedJavaLocalRef<jstring> j_mime = |
367 ConvertUTF8ToJavaString(env, ConvertInitDataType(init_data_type)); | 366 ConvertUTF8ToJavaString(env, ConvertInitDataType(init_data_type)); |
368 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 367 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
369 Java_MediaDrmBridge_createSessionFromNative( | 368 Java_MediaDrmBridge_createSessionFromNative( |
370 env, j_media_drm_.obj(), j_init_data.obj(), j_mime.obj(), | 369 env, j_media_drm_.obj(), j_init_data.obj(), j_mime.obj(), |
371 j_optional_parameters.obj(), promise_id); | 370 j_optional_parameters.obj(), promise_id); |
372 } | 371 } |
373 | 372 |
374 void MediaDrmBridge::LoadSession( | 373 void MediaDrmBridge::LoadSession( |
375 SessionType session_type, | 374 SessionType session_type, |
376 const std::string& session_id, | 375 const std::string& session_id, |
377 scoped_ptr<media::NewSessionCdmPromise> promise) { | 376 scoped_ptr<media::NewSessionCdmPromise> promise) { |
378 DVLOG(2) << __FUNCTION__; | 377 DVLOG(2) << __FUNCTION__; |
379 | 378 |
380 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 379 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
381 promise->reject(NOT_SUPPORTED_ERROR, 0, "LoadSession() is not supported."); | 380 promise->reject(NOT_SUPPORTED_ERROR, 0, "LoadSession() is not supported."); |
382 } | 381 } |
383 | 382 |
384 void MediaDrmBridge::UpdateSession( | 383 void MediaDrmBridge::UpdateSession( |
385 const std::string& session_id, | 384 const std::string& session_id, |
386 const std::vector<uint8_t>& response, | 385 const std::vector<uint8_t>& response, |
387 scoped_ptr<media::SimpleCdmPromise> promise) { | 386 scoped_ptr<media::SimpleCdmPromise> promise) { |
388 DVLOG(2) << __FUNCTION__; | 387 DVLOG(2) << __FUNCTION__; |
389 | 388 |
390 JNIEnv* env = AttachCurrentThread(); | 389 JNIEnv* env = AttachCurrentThread(); |
391 ScopedJavaLocalRef<jbyteArray> j_response = | 390 ScopedJavaLocalRef<jbyteArray> j_response = |
392 base::android::ToJavaByteArray(env, response.data(), response.size()); | 391 base::android::ToJavaByteArray(env, response.data(), response.size()); |
393 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( | 392 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( |
394 env, reinterpret_cast<const uint8_t*>(session_id.data()), | 393 env, reinterpret_cast<const uint8_t*>(session_id.data()), |
395 session_id.size()); | 394 session_id.size()); |
396 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 395 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
397 Java_MediaDrmBridge_updateSession(env, j_media_drm_.obj(), j_session_id.obj(), | 396 Java_MediaDrmBridge_updateSession(env, j_media_drm_.obj(), j_session_id.obj(), |
398 j_response.obj(), promise_id); | 397 j_response.obj(), promise_id); |
399 } | 398 } |
400 | 399 |
401 void MediaDrmBridge::CloseSession(const std::string& session_id, | 400 void MediaDrmBridge::CloseSession(const std::string& session_id, |
402 scoped_ptr<media::SimpleCdmPromise> promise) { | 401 scoped_ptr<media::SimpleCdmPromise> promise) { |
403 DVLOG(2) << __FUNCTION__; | 402 DVLOG(2) << __FUNCTION__; |
404 | 403 |
405 JNIEnv* env = AttachCurrentThread(); | 404 JNIEnv* env = AttachCurrentThread(); |
406 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( | 405 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( |
407 env, reinterpret_cast<const uint8_t*>(session_id.data()), | 406 env, reinterpret_cast<const uint8_t*>(session_id.data()), |
408 session_id.size()); | 407 session_id.size()); |
409 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 408 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
410 Java_MediaDrmBridge_closeSession(env, j_media_drm_.obj(), j_session_id.obj(), | 409 Java_MediaDrmBridge_closeSession(env, j_media_drm_.obj(), j_session_id.obj(), |
411 promise_id); | 410 promise_id); |
412 } | 411 } |
413 | 412 |
414 void MediaDrmBridge::RemoveSession( | 413 void MediaDrmBridge::RemoveSession( |
415 const std::string& session_id, | 414 const std::string& session_id, |
416 scoped_ptr<media::SimpleCdmPromise> promise) { | 415 scoped_ptr<media::SimpleCdmPromise> promise) { |
417 DVLOG(2) << __FUNCTION__; | 416 DVLOG(2) << __FUNCTION__; |
418 | 417 |
419 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 418 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 JNIEnv* env = AttachCurrentThread(); | 826 JNIEnv* env = AttachCurrentThread(); |
828 | 827 |
829 ScopedJavaLocalRef<jbyteArray> j_response = base::android::ToJavaByteArray( | 828 ScopedJavaLocalRef<jbyteArray> j_response = base::android::ToJavaByteArray( |
830 env, reinterpret_cast<const uint8_t*>(response.data()), response.size()); | 829 env, reinterpret_cast<const uint8_t*>(response.data()), response.size()); |
831 | 830 |
832 Java_MediaDrmBridge_processProvisionResponse(env, j_media_drm_.obj(), success, | 831 Java_MediaDrmBridge_processProvisionResponse(env, j_media_drm_.obj(), success, |
833 j_response.obj()); | 832 j_response.obj()); |
834 } | 833 } |
835 | 834 |
836 } // namespace media | 835 } // namespace media |
OLD | NEW |