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 |