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" |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 CHECK(env); | 304 CHECK(env); |
305 | 305 |
306 ScopedJavaLocalRef<jbyteArray> j_scheme_uuid = | 306 ScopedJavaLocalRef<jbyteArray> j_scheme_uuid = |
307 base::android::ToJavaByteArray(env, &scheme_uuid[0], scheme_uuid.size()); | 307 base::android::ToJavaByteArray(env, &scheme_uuid[0], scheme_uuid.size()); |
308 j_media_drm_.Reset(Java_MediaDrmBridge_create( | 308 j_media_drm_.Reset(Java_MediaDrmBridge_create( |
309 env, j_scheme_uuid.obj(), reinterpret_cast<intptr_t>(this))); | 309 env, j_scheme_uuid.obj(), reinterpret_cast<intptr_t>(this))); |
310 } | 310 } |
311 | 311 |
312 MediaDrmBridge::~MediaDrmBridge() { | 312 MediaDrmBridge::~MediaDrmBridge() { |
313 JNIEnv* env = AttachCurrentThread(); | 313 JNIEnv* env = AttachCurrentThread(); |
| 314 player_tracker_.NotifyCdmUnset(); |
314 if (!j_media_drm_.is_null()) | 315 if (!j_media_drm_.is_null()) |
315 Java_MediaDrmBridge_release(env, j_media_drm_.obj()); | 316 Java_MediaDrmBridge_release(env, j_media_drm_.obj()); |
316 } | 317 } |
317 | 318 |
318 // static | 319 // static |
319 scoped_ptr<MediaDrmBridge> MediaDrmBridge::Create( | 320 scoped_ptr<MediaDrmBridge> MediaDrmBridge::Create( |
320 const std::string& key_system, | 321 const std::string& key_system, |
321 const SessionCreatedCB& session_created_cb, | 322 const SessionCreatedCB& session_created_cb, |
322 const SessionMessageCB& session_message_cb, | 323 const SessionMessageCB& session_message_cb, |
323 const SessionReadyCB& session_ready_cb, | 324 const SessionReadyCB& session_ready_cb, |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 DVLOG(1) << __FUNCTION__; | 416 DVLOG(1) << __FUNCTION__; |
416 | 417 |
417 DCHECK(!session_ready_cb_.is_null()) | 418 DCHECK(!session_ready_cb_.is_null()) |
418 << __FUNCTION__ << " called on a sessionless MediaDrmBridge object."; | 419 << __FUNCTION__ << " called on a sessionless MediaDrmBridge object."; |
419 | 420 |
420 JNIEnv* env = AttachCurrentThread(); | 421 JNIEnv* env = AttachCurrentThread(); |
421 ScopedJavaLocalRef<jbyteArray> j_response = | 422 ScopedJavaLocalRef<jbyteArray> j_response = |
422 base::android::ToJavaByteArray(env, response, response_length); | 423 base::android::ToJavaByteArray(env, response, response_length); |
423 Java_MediaDrmBridge_updateSession( | 424 Java_MediaDrmBridge_updateSession( |
424 env, j_media_drm_.obj(), session_id, j_response.obj()); | 425 env, j_media_drm_.obj(), session_id, j_response.obj()); |
| 426 |
| 427 // TODO(xhwang/jrummell): Move this when usableKeyIds/keyschange are |
| 428 // implemented. |
| 429 player_tracker_.NotifyNewKey(); |
425 } | 430 } |
426 | 431 |
427 void MediaDrmBridge::ReleaseSession(uint32 session_id) { | 432 void MediaDrmBridge::ReleaseSession(uint32 session_id) { |
428 DVLOG(1) << __FUNCTION__; | 433 DVLOG(1) << __FUNCTION__; |
429 | 434 |
430 DCHECK(!session_closed_cb_.is_null()) | 435 DCHECK(!session_closed_cb_.is_null()) |
431 << __FUNCTION__ << " called on a sessionless MediaDrmBridge object."; | 436 << __FUNCTION__ << " called on a sessionless MediaDrmBridge object."; |
432 | 437 |
433 JNIEnv* env = AttachCurrentThread(); | 438 JNIEnv* env = AttachCurrentThread(); |
434 Java_MediaDrmBridge_releaseSession(env, j_media_drm_.obj(), session_id); | 439 Java_MediaDrmBridge_releaseSession(env, j_media_drm_.obj(), session_id); |
435 } | 440 } |
436 | 441 |
| 442 int MediaDrmBridge::RegisterPlayer(const base::Closure& new_key_cb, |
| 443 const base::Closure& cdm_unset_cb) { |
| 444 return player_tracker_.RegisterPlayer(new_key_cb, cdm_unset_cb); |
| 445 } |
| 446 |
| 447 void MediaDrmBridge::UnregisterPlayer(int registration_id) { |
| 448 player_tracker_.UnregisterPlayer(registration_id); |
| 449 } |
| 450 |
437 void MediaDrmBridge::SetMediaCryptoReadyCB(const base::Closure& closure) { | 451 void MediaDrmBridge::SetMediaCryptoReadyCB(const base::Closure& closure) { |
438 if (closure.is_null()) { | 452 if (closure.is_null()) { |
439 media_crypto_ready_cb_.Reset(); | 453 media_crypto_ready_cb_.Reset(); |
440 return; | 454 return; |
441 } | 455 } |
442 | 456 |
443 DCHECK(media_crypto_ready_cb_.is_null()); | 457 DCHECK(media_crypto_ready_cb_.is_null()); |
444 | 458 |
445 if (!GetMediaCrypto().is_null()) { | 459 if (!GetMediaCrypto().is_null()) { |
446 base::MessageLoopProxy::current()->PostTask(FROM_HERE, closure); | 460 base::MessageLoopProxy::current()->PostTask(FROM_HERE, closure); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 JNIEnv* env = AttachCurrentThread(); | 542 JNIEnv* env = AttachCurrentThread(); |
529 Java_MediaDrmBridge_resetDeviceCredentials(env, j_media_drm_.obj()); | 543 Java_MediaDrmBridge_resetDeviceCredentials(env, j_media_drm_.obj()); |
530 } | 544 } |
531 | 545 |
532 void MediaDrmBridge::OnResetDeviceCredentialsCompleted( | 546 void MediaDrmBridge::OnResetDeviceCredentialsCompleted( |
533 JNIEnv* env, jobject, bool success) { | 547 JNIEnv* env, jobject, bool success) { |
534 base::ResetAndReturn(&reset_credentials_cb_).Run(success); | 548 base::ResetAndReturn(&reset_credentials_cb_).Run(success); |
535 } | 549 } |
536 | 550 |
537 } // namespace media | 551 } // namespace media |
OLD | NEW |