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 <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/android/build_info.h" | 9 #include "base/android/build_info.h" |
10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
11 #include "base/android/jni_string.h" | 11 #include "base/android/jni_string.h" |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/callback_helpers.h" | 13 #include "base/callback_helpers.h" |
14 #include "base/containers/hash_tables.h" | 14 #include "base/containers/hash_tables.h" |
15 #include "base/lazy_instance.h" | 15 #include "base/lazy_instance.h" |
16 #include "base/location.h" | 16 #include "base/location.h" |
17 #include "base/logging.h" | 17 #include "base/logging.h" |
18 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" |
19 #include "base/stl_util.h" | |
20 #include "base/strings/string_number_conversions.h" | 19 #include "base/strings/string_number_conversions.h" |
21 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
22 #include "base/sys_byteorder.h" | 21 #include "base/sys_byteorder.h" |
23 #include "base/sys_info.h" | 22 #include "base/sys_info.h" |
24 #include "base/thread_task_runner_handle.h" | 23 #include "base/thread_task_runner_handle.h" |
25 #include "jni/MediaDrmBridge_jni.h" | 24 #include "jni/MediaDrmBridge_jni.h" |
26 #include "media/base/android/media_client_android.h" | 25 #include "media/base/android/media_client_android.h" |
27 #include "media/base/android/media_drm_bridge_delegate.h" | 26 #include "media/base/android/media_drm_bridge_delegate.h" |
28 #include "media/base/android/provision_fetcher.h" | 27 #include "media/base/android/provision_fetcher.h" |
29 #include "media/base/cdm_key_information.h" | 28 #include "media/base/cdm_key_information.h" |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 client->GetMediaDrmBridgeDelegate(scheme_uuid_); | 333 client->GetMediaDrmBridgeDelegate(scheme_uuid_); |
335 if (delegate) { | 334 if (delegate) { |
336 std::vector<uint8> init_data_from_delegate; | 335 std::vector<uint8> init_data_from_delegate; |
337 std::vector<std::string> optional_parameters_from_delegate; | 336 std::vector<std::string> optional_parameters_from_delegate; |
338 if (!delegate->OnCreateSession(init_data_type, init_data, | 337 if (!delegate->OnCreateSession(init_data_type, init_data, |
339 &init_data_from_delegate, | 338 &init_data_from_delegate, |
340 &optional_parameters_from_delegate)) { | 339 &optional_parameters_from_delegate)) { |
341 promise->reject(INVALID_ACCESS_ERROR, 0, "Invalid init data."); | 340 promise->reject(INVALID_ACCESS_ERROR, 0, "Invalid init data."); |
342 } | 341 } |
343 if (!init_data_from_delegate.empty()) { | 342 if (!init_data_from_delegate.empty()) { |
344 j_init_data = base::android::ToJavaByteArray( | 343 j_init_data = |
345 env, vector_as_array(&init_data_from_delegate), | 344 base::android::ToJavaByteArray(env, init_data_from_delegate.data(), |
346 init_data_from_delegate.size()); | 345 init_data_from_delegate.size()); |
347 } | 346 } |
348 if (!optional_parameters_from_delegate.empty()) { | 347 if (!optional_parameters_from_delegate.empty()) { |
349 j_optional_parameters = base::android::ToJavaArrayOfStrings( | 348 j_optional_parameters = base::android::ToJavaArrayOfStrings( |
350 env, optional_parameters_from_delegate); | 349 env, optional_parameters_from_delegate); |
351 } | 350 } |
352 } | 351 } |
353 } | 352 } |
354 | 353 |
355 if (j_init_data.is_null()) { | 354 if (j_init_data.is_null()) { |
356 j_init_data = base::android::ToJavaByteArray( | 355 j_init_data = |
357 env, vector_as_array(&init_data), init_data.size()); | 356 base::android::ToJavaByteArray(env, init_data.data(), init_data.size()); |
358 } | 357 } |
359 | 358 |
360 ScopedJavaLocalRef<jstring> j_mime = | 359 ScopedJavaLocalRef<jstring> j_mime = |
361 ConvertUTF8ToJavaString(env, ConvertInitDataType(init_data_type)); | 360 ConvertUTF8ToJavaString(env, ConvertInitDataType(init_data_type)); |
362 uint32_t promise_id = cdm_promise_adapter_->SavePromise(promise.Pass()); | 361 uint32_t promise_id = cdm_promise_adapter_->SavePromise(promise.Pass()); |
363 Java_MediaDrmBridge_createSessionFromNative( | 362 Java_MediaDrmBridge_createSessionFromNative( |
364 env, j_media_drm_.obj(), j_init_data.obj(), j_mime.obj(), | 363 env, j_media_drm_.obj(), j_init_data.obj(), j_mime.obj(), |
365 j_optional_parameters.obj(), promise_id); | 364 j_optional_parameters.obj(), promise_id); |
366 } | 365 } |
367 | 366 |
368 void MediaDrmBridge::LoadSession( | 367 void MediaDrmBridge::LoadSession( |
369 SessionType session_type, | 368 SessionType session_type, |
370 const std::string& session_id, | 369 const std::string& session_id, |
371 scoped_ptr<media::NewSessionCdmPromise> promise) { | 370 scoped_ptr<media::NewSessionCdmPromise> promise) { |
372 DVLOG(2) << __FUNCTION__; | 371 DVLOG(2) << __FUNCTION__; |
373 | 372 |
374 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 373 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
375 promise->reject(NOT_SUPPORTED_ERROR, 0, "LoadSession() is not supported."); | 374 promise->reject(NOT_SUPPORTED_ERROR, 0, "LoadSession() is not supported."); |
376 } | 375 } |
377 | 376 |
378 void MediaDrmBridge::UpdateSession( | 377 void MediaDrmBridge::UpdateSession( |
379 const std::string& session_id, | 378 const std::string& session_id, |
380 const std::vector<uint8_t>& response, | 379 const std::vector<uint8_t>& response, |
381 scoped_ptr<media::SimpleCdmPromise> promise) { | 380 scoped_ptr<media::SimpleCdmPromise> promise) { |
382 DVLOG(2) << __FUNCTION__; | 381 DVLOG(2) << __FUNCTION__; |
383 | 382 |
384 JNIEnv* env = AttachCurrentThread(); | 383 JNIEnv* env = AttachCurrentThread(); |
385 ScopedJavaLocalRef<jbyteArray> j_response = base::android::ToJavaByteArray( | 384 ScopedJavaLocalRef<jbyteArray> j_response = |
386 env, vector_as_array(&response), response.size()); | 385 base::android::ToJavaByteArray(env, response.data(), response.size()); |
387 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( | 386 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( |
388 env, reinterpret_cast<const uint8_t*>(session_id.data()), | 387 env, reinterpret_cast<const uint8_t*>(session_id.data()), |
389 session_id.size()); | 388 session_id.size()); |
390 uint32_t promise_id = cdm_promise_adapter_->SavePromise(promise.Pass()); | 389 uint32_t promise_id = cdm_promise_adapter_->SavePromise(promise.Pass()); |
391 Java_MediaDrmBridge_updateSession(env, j_media_drm_.obj(), j_session_id.obj(), | 390 Java_MediaDrmBridge_updateSession(env, j_media_drm_.obj(), j_session_id.obj(), |
392 j_response.obj(), promise_id); | 391 j_response.obj(), promise_id); |
393 } | 392 } |
394 | 393 |
395 void MediaDrmBridge::CloseSession(const std::string& session_id, | 394 void MediaDrmBridge::CloseSession(const std::string& session_id, |
396 scoped_ptr<media::SimpleCdmPromise> promise) { | 395 scoped_ptr<media::SimpleCdmPromise> promise) { |
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
801 JNIEnv* env = AttachCurrentThread(); | 800 JNIEnv* env = AttachCurrentThread(); |
802 | 801 |
803 ScopedJavaLocalRef<jbyteArray> j_response = base::android::ToJavaByteArray( | 802 ScopedJavaLocalRef<jbyteArray> j_response = base::android::ToJavaByteArray( |
804 env, reinterpret_cast<const uint8_t*>(response.data()), response.size()); | 803 env, reinterpret_cast<const uint8_t*>(response.data()), response.size()); |
805 | 804 |
806 Java_MediaDrmBridge_processProvisionResponse(env, j_media_drm_.obj(), success, | 805 Java_MediaDrmBridge_processProvisionResponse(env, j_media_drm_.obj(), success, |
807 j_response.obj()); | 806 j_response.obj()); |
808 } | 807 } |
809 | 808 |
810 } // namespace media | 809 } // namespace media |
OLD | NEW |