| 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 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 | 347 |
| 348 DCHECK(!certificate.empty()); | 348 DCHECK(!certificate.empty()); |
| 349 | 349 |
| 350 JNIEnv* env = AttachCurrentThread(); | 350 JNIEnv* env = AttachCurrentThread(); |
| 351 ScopedJavaLocalRef<jbyteArray> j_certificate = base::android::ToJavaByteArray( | 351 ScopedJavaLocalRef<jbyteArray> j_certificate = base::android::ToJavaByteArray( |
| 352 env, certificate.data(), certificate.size()); | 352 env, certificate.data(), certificate.size()); |
| 353 if (Java_MediaDrmBridge_setServerCertificate(env, j_media_drm_, | 353 if (Java_MediaDrmBridge_setServerCertificate(env, j_media_drm_, |
| 354 j_certificate)) { | 354 j_certificate)) { |
| 355 promise->resolve(); | 355 promise->resolve(); |
| 356 } else { | 356 } else { |
| 357 promise->reject(INVALID_ACCESS_ERROR, 0, "Set server certificate failed."); | 357 promise->reject(CdmPromise::INVALID_ACCESS_ERROR, 0, |
| 358 "Set server certificate failed."); |
| 358 } | 359 } |
| 359 } | 360 } |
| 360 | 361 |
| 361 void MediaDrmBridge::CreateSessionAndGenerateRequest( | 362 void MediaDrmBridge::CreateSessionAndGenerateRequest( |
| 362 SessionType session_type, | 363 SessionType session_type, |
| 363 media::EmeInitDataType init_data_type, | 364 media::EmeInitDataType init_data_type, |
| 364 const std::vector<uint8_t>& init_data, | 365 const std::vector<uint8_t>& init_data, |
| 365 std::unique_ptr<media::NewSessionCdmPromise> promise) { | 366 std::unique_ptr<media::NewSessionCdmPromise> promise) { |
| 366 DCHECK(task_runner_->BelongsToCurrentThread()); | 367 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 367 DVLOG(2) << __FUNCTION__; | 368 DVLOG(2) << __FUNCTION__; |
| 368 | 369 |
| 369 if (session_type != media::MediaKeys::TEMPORARY_SESSION) { | 370 if (session_type != media::MediaKeys::TEMPORARY_SESSION) { |
| 370 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 371 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
| 371 promise->reject(NOT_SUPPORTED_ERROR, 0, | 372 promise->reject(CdmPromise::NOT_SUPPORTED_ERROR, 0, |
| 372 "Only the temporary session type is supported."); | 373 "Only the temporary session type is supported."); |
| 373 return; | 374 return; |
| 374 } | 375 } |
| 375 | 376 |
| 376 JNIEnv* env = AttachCurrentThread(); | 377 JNIEnv* env = AttachCurrentThread(); |
| 377 ScopedJavaLocalRef<jbyteArray> j_init_data; | 378 ScopedJavaLocalRef<jbyteArray> j_init_data; |
| 378 ScopedJavaLocalRef<jobjectArray> j_optional_parameters; | 379 ScopedJavaLocalRef<jobjectArray> j_optional_parameters; |
| 379 | 380 |
| 380 MediaClientAndroid* client = GetMediaClientAndroid(); | 381 MediaClientAndroid* client = GetMediaClientAndroid(); |
| 381 if (client) { | 382 if (client) { |
| 382 MediaDrmBridgeDelegate* delegate = | 383 MediaDrmBridgeDelegate* delegate = |
| 383 client->GetMediaDrmBridgeDelegate(scheme_uuid_); | 384 client->GetMediaDrmBridgeDelegate(scheme_uuid_); |
| 384 if (delegate) { | 385 if (delegate) { |
| 385 std::vector<uint8_t> init_data_from_delegate; | 386 std::vector<uint8_t> init_data_from_delegate; |
| 386 std::vector<std::string> optional_parameters_from_delegate; | 387 std::vector<std::string> optional_parameters_from_delegate; |
| 387 if (!delegate->OnCreateSession(init_data_type, init_data, | 388 if (!delegate->OnCreateSession(init_data_type, init_data, |
| 388 &init_data_from_delegate, | 389 &init_data_from_delegate, |
| 389 &optional_parameters_from_delegate)) { | 390 &optional_parameters_from_delegate)) { |
| 390 promise->reject(INVALID_ACCESS_ERROR, 0, "Invalid init data."); | 391 promise->reject(CdmPromise::INVALID_ACCESS_ERROR, 0, |
| 392 "Invalid init data."); |
| 391 return; | 393 return; |
| 392 } | 394 } |
| 393 if (!init_data_from_delegate.empty()) { | 395 if (!init_data_from_delegate.empty()) { |
| 394 j_init_data = | 396 j_init_data = |
| 395 base::android::ToJavaByteArray(env, init_data_from_delegate.data(), | 397 base::android::ToJavaByteArray(env, init_data_from_delegate.data(), |
| 396 init_data_from_delegate.size()); | 398 init_data_from_delegate.size()); |
| 397 } | 399 } |
| 398 if (!optional_parameters_from_delegate.empty()) { | 400 if (!optional_parameters_from_delegate.empty()) { |
| 399 j_optional_parameters = base::android::ToJavaArrayOfStrings( | 401 j_optional_parameters = base::android::ToJavaArrayOfStrings( |
| 400 env, optional_parameters_from_delegate); | 402 env, optional_parameters_from_delegate); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 416 } | 418 } |
| 417 | 419 |
| 418 void MediaDrmBridge::LoadSession( | 420 void MediaDrmBridge::LoadSession( |
| 419 SessionType session_type, | 421 SessionType session_type, |
| 420 const std::string& session_id, | 422 const std::string& session_id, |
| 421 std::unique_ptr<media::NewSessionCdmPromise> promise) { | 423 std::unique_ptr<media::NewSessionCdmPromise> promise) { |
| 422 DCHECK(task_runner_->BelongsToCurrentThread()); | 424 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 423 DVLOG(2) << __FUNCTION__; | 425 DVLOG(2) << __FUNCTION__; |
| 424 | 426 |
| 425 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 427 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
| 426 promise->reject(NOT_SUPPORTED_ERROR, 0, "LoadSession() is not supported."); | 428 promise->reject(CdmPromise::NOT_SUPPORTED_ERROR, 0, |
| 429 "LoadSession() is not supported."); |
| 427 } | 430 } |
| 428 | 431 |
| 429 void MediaDrmBridge::UpdateSession( | 432 void MediaDrmBridge::UpdateSession( |
| 430 const std::string& session_id, | 433 const std::string& session_id, |
| 431 const std::vector<uint8_t>& response, | 434 const std::vector<uint8_t>& response, |
| 432 std::unique_ptr<media::SimpleCdmPromise> promise) { | 435 std::unique_ptr<media::SimpleCdmPromise> promise) { |
| 433 DCHECK(task_runner_->BelongsToCurrentThread()); | 436 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 434 DVLOG(2) << __FUNCTION__; | 437 DVLOG(2) << __FUNCTION__; |
| 435 | 438 |
| 436 JNIEnv* env = AttachCurrentThread(); | 439 JNIEnv* env = AttachCurrentThread(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 458 Java_MediaDrmBridge_closeSession(env, j_media_drm_, j_session_id, promise_id); | 461 Java_MediaDrmBridge_closeSession(env, j_media_drm_, j_session_id, promise_id); |
| 459 } | 462 } |
| 460 | 463 |
| 461 void MediaDrmBridge::RemoveSession( | 464 void MediaDrmBridge::RemoveSession( |
| 462 const std::string& session_id, | 465 const std::string& session_id, |
| 463 std::unique_ptr<media::SimpleCdmPromise> promise) { | 466 std::unique_ptr<media::SimpleCdmPromise> promise) { |
| 464 DCHECK(task_runner_->BelongsToCurrentThread()); | 467 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 465 DVLOG(2) << __FUNCTION__; | 468 DVLOG(2) << __FUNCTION__; |
| 466 | 469 |
| 467 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; | 470 NOTIMPLEMENTED() << "EME persistent sessions not yet supported on Android."; |
| 468 promise->reject(NOT_SUPPORTED_ERROR, 0, "RemoveSession() is not supported."); | 471 promise->reject(CdmPromise::NOT_SUPPORTED_ERROR, 0, |
| 472 "RemoveSession() is not supported."); |
| 469 } | 473 } |
| 470 | 474 |
| 471 CdmContext* MediaDrmBridge::GetCdmContext() { | 475 CdmContext* MediaDrmBridge::GetCdmContext() { |
| 472 DVLOG(2) << __FUNCTION__; | 476 DVLOG(2) << __FUNCTION__; |
| 473 | 477 |
| 474 return &media_drm_bridge_cdm_context_; | 478 return &media_drm_bridge_cdm_context_; |
| 475 } | 479 } |
| 476 | 480 |
| 477 void MediaDrmBridge::DeleteOnCorrectThread() const { | 481 void MediaDrmBridge::DeleteOnCorrectThread() const { |
| 478 DVLOG(1) << __FUNCTION__; | 482 DVLOG(1) << __FUNCTION__; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 | 526 |
| 523 void MediaDrmBridge::ResolvePromiseWithSession(uint32_t promise_id, | 527 void MediaDrmBridge::ResolvePromiseWithSession(uint32_t promise_id, |
| 524 const std::string& session_id) { | 528 const std::string& session_id) { |
| 525 DVLOG(2) << __FUNCTION__; | 529 DVLOG(2) << __FUNCTION__; |
| 526 cdm_promise_adapter_.ResolvePromise(promise_id, session_id); | 530 cdm_promise_adapter_.ResolvePromise(promise_id, session_id); |
| 527 } | 531 } |
| 528 | 532 |
| 529 void MediaDrmBridge::RejectPromise(uint32_t promise_id, | 533 void MediaDrmBridge::RejectPromise(uint32_t promise_id, |
| 530 const std::string& error_message) { | 534 const std::string& error_message) { |
| 531 DVLOG(2) << __FUNCTION__; | 535 DVLOG(2) << __FUNCTION__; |
| 532 cdm_promise_adapter_.RejectPromise(promise_id, MediaKeys::UNKNOWN_ERROR, 0, | 536 cdm_promise_adapter_.RejectPromise(promise_id, CdmPromise::UNKNOWN_ERROR, 0, |
| 533 error_message); | 537 error_message); |
| 534 } | 538 } |
| 535 | 539 |
| 536 void MediaDrmBridge::SetMediaCryptoReadyCB( | 540 void MediaDrmBridge::SetMediaCryptoReadyCB( |
| 537 const MediaCryptoReadyCB& media_crypto_ready_cb) { | 541 const MediaCryptoReadyCB& media_crypto_ready_cb) { |
| 538 if (!task_runner_->BelongsToCurrentThread()) { | 542 if (!task_runner_->BelongsToCurrentThread()) { |
| 539 task_runner_->PostTask( | 543 task_runner_->PostTask( |
| 540 FROM_HERE, | 544 FROM_HERE, |
| 541 base::Bind(&MediaDrmBridge::SetMediaCryptoReadyCB, | 545 base::Bind(&MediaDrmBridge::SetMediaCryptoReadyCB, |
| 542 weak_factory_.GetWeakPtr(), media_crypto_ready_cb)); | 546 weak_factory_.GetWeakPtr(), media_crypto_ready_cb)); |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 } | 871 } |
| 868 | 872 |
| 869 void MediaDrmBridge::OnHasAdditionalUsableKey() { | 873 void MediaDrmBridge::OnHasAdditionalUsableKey() { |
| 870 DCHECK(task_runner_->BelongsToCurrentThread()); | 874 DCHECK(task_runner_->BelongsToCurrentThread()); |
| 871 DVLOG(1) << __FUNCTION__; | 875 DVLOG(1) << __FUNCTION__; |
| 872 | 876 |
| 873 player_tracker_.NotifyNewKey(); | 877 player_tracker_.NotifyNewKey(); |
| 874 } | 878 } |
| 875 | 879 |
| 876 } // namespace media | 880 } // namespace media |
| OLD | NEW |