| 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 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 return nullptr; | 338 return nullptr; |
| 339 | 339 |
| 340 return MediaDrmBridge::Create(key_system, security_level, create_fetcher_cb, | 340 return MediaDrmBridge::Create(key_system, security_level, create_fetcher_cb, |
| 341 SessionMessageCB(), SessionClosedCB(), | 341 SessionMessageCB(), SessionClosedCB(), |
| 342 LegacySessionErrorCB(), SessionKeysChangeCB(), | 342 LegacySessionErrorCB(), SessionKeysChangeCB(), |
| 343 SessionExpirationUpdateCB()); | 343 SessionExpirationUpdateCB()); |
| 344 } | 344 } |
| 345 | 345 |
| 346 void MediaDrmBridge::SetServerCertificate( | 346 void MediaDrmBridge::SetServerCertificate( |
| 347 const std::vector<uint8_t>& certificate, | 347 const std::vector<uint8_t>& certificate, |
| 348 scoped_ptr<media::SimpleCdmPromise> promise) { | 348 std::unique_ptr<media::SimpleCdmPromise> promise) { |
| 349 DCHECK(task_runner_->BelongsToCurrentThread()); | 349 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 350 DVLOG(2) << __FUNCTION__ << "(" << certificate.size() << " bytes)"; | 350 DVLOG(2) << __FUNCTION__ << "(" << certificate.size() << " bytes)"; |
| 351 | 351 |
| 352 DCHECK(!certificate.empty()); | 352 DCHECK(!certificate.empty()); |
| 353 | 353 |
| 354 JNIEnv* env = AttachCurrentThread(); | 354 JNIEnv* env = AttachCurrentThread(); |
| 355 ScopedJavaLocalRef<jbyteArray> j_certificate = base::android::ToJavaByteArray( | 355 ScopedJavaLocalRef<jbyteArray> j_certificate = base::android::ToJavaByteArray( |
| 356 env, certificate.data(), certificate.size()); | 356 env, certificate.data(), certificate.size()); |
| 357 if (Java_MediaDrmBridge_setServerCertificate(env, j_media_drm_.obj(), | 357 if (Java_MediaDrmBridge_setServerCertificate(env, j_media_drm_.obj(), |
| 358 j_certificate.obj())) { | 358 j_certificate.obj())) { |
| 359 promise->resolve(); | 359 promise->resolve(); |
| 360 } else { | 360 } else { |
| 361 promise->reject(INVALID_ACCESS_ERROR, 0, "Set server certificate failed."); | 361 promise->reject(INVALID_ACCESS_ERROR, 0, "Set server certificate failed."); |
| 362 } | 362 } |
| 363 } | 363 } |
| 364 | 364 |
| 365 void MediaDrmBridge::CreateSessionAndGenerateRequest( | 365 void MediaDrmBridge::CreateSessionAndGenerateRequest( |
| 366 SessionType session_type, | 366 SessionType session_type, |
| 367 media::EmeInitDataType init_data_type, | 367 media::EmeInitDataType init_data_type, |
| 368 const std::vector<uint8_t>& init_data, | 368 const std::vector<uint8_t>& init_data, |
| 369 scoped_ptr<media::NewSessionCdmPromise> promise) { | 369 std::unique_ptr<media::NewSessionCdmPromise> promise) { |
| 370 DCHECK(task_runner_->BelongsToCurrentThread()); | 370 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 371 DVLOG(2) << __FUNCTION__; | 371 DVLOG(2) << __FUNCTION__; |
| 372 | 372 |
| 373 if (session_type != media::MediaKeys::TEMPORARY_SESSION) { | 373 if (session_type != media::MediaKeys::TEMPORARY_SESSION) { |
| 374 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 374 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
| 375 promise->reject(NOT_SUPPORTED_ERROR, 0, | 375 promise->reject(NOT_SUPPORTED_ERROR, 0, |
| 376 "Only the temporary session type is supported."); | 376 "Only the temporary session type is supported."); |
| 377 return; | 377 return; |
| 378 } | 378 } |
| 379 | 379 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 ConvertUTF8ToJavaString(env, ConvertInitDataType(init_data_type)); | 415 ConvertUTF8ToJavaString(env, ConvertInitDataType(init_data_type)); |
| 416 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 416 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 417 Java_MediaDrmBridge_createSessionFromNative( | 417 Java_MediaDrmBridge_createSessionFromNative( |
| 418 env, j_media_drm_.obj(), j_init_data.obj(), j_mime.obj(), | 418 env, j_media_drm_.obj(), j_init_data.obj(), j_mime.obj(), |
| 419 j_optional_parameters.obj(), promise_id); | 419 j_optional_parameters.obj(), promise_id); |
| 420 } | 420 } |
| 421 | 421 |
| 422 void MediaDrmBridge::LoadSession( | 422 void MediaDrmBridge::LoadSession( |
| 423 SessionType session_type, | 423 SessionType session_type, |
| 424 const std::string& session_id, | 424 const std::string& session_id, |
| 425 scoped_ptr<media::NewSessionCdmPromise> promise) { | 425 std::unique_ptr<media::NewSessionCdmPromise> promise) { |
| 426 DCHECK(task_runner_->BelongsToCurrentThread()); | 426 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 427 DVLOG(2) << __FUNCTION__; | 427 DVLOG(2) << __FUNCTION__; |
| 428 | 428 |
| 429 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 429 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
| 430 promise->reject(NOT_SUPPORTED_ERROR, 0, "LoadSession() is not supported."); | 430 promise->reject(NOT_SUPPORTED_ERROR, 0, "LoadSession() is not supported."); |
| 431 } | 431 } |
| 432 | 432 |
| 433 void MediaDrmBridge::UpdateSession( | 433 void MediaDrmBridge::UpdateSession( |
| 434 const std::string& session_id, | 434 const std::string& session_id, |
| 435 const std::vector<uint8_t>& response, | 435 const std::vector<uint8_t>& response, |
| 436 scoped_ptr<media::SimpleCdmPromise> promise) { | 436 std::unique_ptr<media::SimpleCdmPromise> promise) { |
| 437 DCHECK(task_runner_->BelongsToCurrentThread()); | 437 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 438 DVLOG(2) << __FUNCTION__; | 438 DVLOG(2) << __FUNCTION__; |
| 439 | 439 |
| 440 JNIEnv* env = AttachCurrentThread(); | 440 JNIEnv* env = AttachCurrentThread(); |
| 441 ScopedJavaLocalRef<jbyteArray> j_response = | 441 ScopedJavaLocalRef<jbyteArray> j_response = |
| 442 base::android::ToJavaByteArray(env, response.data(), response.size()); | 442 base::android::ToJavaByteArray(env, response.data(), response.size()); |
| 443 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( | 443 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( |
| 444 env, reinterpret_cast<const uint8_t*>(session_id.data()), | 444 env, reinterpret_cast<const uint8_t*>(session_id.data()), |
| 445 session_id.size()); | 445 session_id.size()); |
| 446 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 446 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 447 Java_MediaDrmBridge_updateSession(env, j_media_drm_.obj(), j_session_id.obj(), | 447 Java_MediaDrmBridge_updateSession(env, j_media_drm_.obj(), j_session_id.obj(), |
| 448 j_response.obj(), promise_id); | 448 j_response.obj(), promise_id); |
| 449 } | 449 } |
| 450 | 450 |
| 451 void MediaDrmBridge::CloseSession(const std::string& session_id, | 451 void MediaDrmBridge::CloseSession( |
| 452 scoped_ptr<media::SimpleCdmPromise> promise) { | 452 const std::string& session_id, |
| 453 std::unique_ptr<media::SimpleCdmPromise> promise) { |
| 453 DCHECK(task_runner_->BelongsToCurrentThread()); | 454 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 454 DVLOG(2) << __FUNCTION__; | 455 DVLOG(2) << __FUNCTION__; |
| 455 | 456 |
| 456 JNIEnv* env = AttachCurrentThread(); | 457 JNIEnv* env = AttachCurrentThread(); |
| 457 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( | 458 ScopedJavaLocalRef<jbyteArray> j_session_id = base::android::ToJavaByteArray( |
| 458 env, reinterpret_cast<const uint8_t*>(session_id.data()), | 459 env, reinterpret_cast<const uint8_t*>(session_id.data()), |
| 459 session_id.size()); | 460 session_id.size()); |
| 460 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 461 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 461 Java_MediaDrmBridge_closeSession(env, j_media_drm_.obj(), j_session_id.obj(), | 462 Java_MediaDrmBridge_closeSession(env, j_media_drm_.obj(), j_session_id.obj(), |
| 462 promise_id); | 463 promise_id); |
| 463 } | 464 } |
| 464 | 465 |
| 465 void MediaDrmBridge::RemoveSession( | 466 void MediaDrmBridge::RemoveSession( |
| 466 const std::string& session_id, | 467 const std::string& session_id, |
| 467 scoped_ptr<media::SimpleCdmPromise> promise) { | 468 std::unique_ptr<media::SimpleCdmPromise> promise) { |
| 468 DCHECK(task_runner_->BelongsToCurrentThread()); | 469 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 469 DVLOG(2) << __FUNCTION__; | 470 DVLOG(2) << __FUNCTION__; |
| 470 | 471 |
| 471 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 472 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
| 472 promise->reject(NOT_SUPPORTED_ERROR, 0, "RemoveSession() is not supported."); | 473 promise->reject(NOT_SUPPORTED_ERROR, 0, "RemoveSession() is not supported."); |
| 473 } | 474 } |
| 474 | 475 |
| 475 CdmContext* MediaDrmBridge::GetCdmContext() { | 476 CdmContext* MediaDrmBridge::GetCdmContext() { |
| 476 DVLOG(2) << __FUNCTION__; | 477 DVLOG(2) << __FUNCTION__; |
| 477 | 478 |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 897 } | 898 } |
| 898 | 899 |
| 899 void MediaDrmBridge::OnHasAdditionalUsableKey() { | 900 void MediaDrmBridge::OnHasAdditionalUsableKey() { |
| 900 DCHECK(task_runner_->BelongsToCurrentThread()); | 901 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 901 DVLOG(1) << __FUNCTION__; | 902 DVLOG(1) << __FUNCTION__; |
| 902 | 903 |
| 903 player_tracker_.NotifyNewKey(); | 904 player_tracker_.NotifyNewKey(); |
| 904 } | 905 } |
| 905 | 906 |
| 906 } // namespace media | 907 } // namespace media |
| OLD | NEW |