OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/pepper/content_decryptor_delegate.h" | 5 #include "content/renderer/pepper/content_decryptor_delegate.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 void ContentDecryptorDelegate::Initialize( | 382 void ContentDecryptorDelegate::Initialize( |
383 const std::string& key_system, | 383 const std::string& key_system, |
384 bool allow_distinctive_identifier, | 384 bool allow_distinctive_identifier, |
385 bool allow_persistent_state, | 385 bool allow_persistent_state, |
386 const media::SessionMessageCB& session_message_cb, | 386 const media::SessionMessageCB& session_message_cb, |
387 const media::SessionClosedCB& session_closed_cb, | 387 const media::SessionClosedCB& session_closed_cb, |
388 const media::LegacySessionErrorCB& legacy_session_error_cb, | 388 const media::LegacySessionErrorCB& legacy_session_error_cb, |
389 const media::SessionKeysChangeCB& session_keys_change_cb, | 389 const media::SessionKeysChangeCB& session_keys_change_cb, |
390 const media::SessionExpirationUpdateCB& session_expiration_update_cb, | 390 const media::SessionExpirationUpdateCB& session_expiration_update_cb, |
391 const base::Closure& fatal_plugin_error_cb, | 391 const base::Closure& fatal_plugin_error_cb, |
392 scoped_ptr<media::SimpleCdmPromise> promise) { | 392 std::unique_ptr<media::SimpleCdmPromise> promise) { |
393 DCHECK(!key_system.empty()); | 393 DCHECK(!key_system.empty()); |
394 DCHECK(key_system_.empty()); | 394 DCHECK(key_system_.empty()); |
395 key_system_ = key_system; | 395 key_system_ = key_system; |
396 | 396 |
397 session_message_cb_ = session_message_cb; | 397 session_message_cb_ = session_message_cb; |
398 session_closed_cb_ = session_closed_cb; | 398 session_closed_cb_ = session_closed_cb; |
399 legacy_session_error_cb_ = legacy_session_error_cb; | 399 legacy_session_error_cb_ = legacy_session_error_cb; |
400 session_keys_change_cb_ = session_keys_change_cb; | 400 session_keys_change_cb_ = session_keys_change_cb; |
401 session_expiration_update_cb_ = session_expiration_update_cb; | 401 session_expiration_update_cb_ = session_expiration_update_cb; |
402 fatal_plugin_error_cb_ = fatal_plugin_error_cb; | 402 fatal_plugin_error_cb_ = fatal_plugin_error_cb; |
403 | 403 |
404 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 404 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
405 plugin_decryption_interface_->Initialize( | 405 plugin_decryption_interface_->Initialize( |
406 pp_instance_, promise_id, StringVar::StringToPPVar(key_system_), | 406 pp_instance_, promise_id, StringVar::StringToPPVar(key_system_), |
407 PP_FromBool(allow_distinctive_identifier), | 407 PP_FromBool(allow_distinctive_identifier), |
408 PP_FromBool(allow_persistent_state)); | 408 PP_FromBool(allow_persistent_state)); |
409 } | 409 } |
410 | 410 |
411 void ContentDecryptorDelegate::InstanceCrashed() { | 411 void ContentDecryptorDelegate::InstanceCrashed() { |
412 fatal_plugin_error_cb_.Run(); | 412 fatal_plugin_error_cb_.Run(); |
413 SatisfyAllPendingCallbacksOnError(); | 413 SatisfyAllPendingCallbacksOnError(); |
414 } | 414 } |
415 | 415 |
416 void ContentDecryptorDelegate::SetServerCertificate( | 416 void ContentDecryptorDelegate::SetServerCertificate( |
417 const std::vector<uint8_t>& certificate, | 417 const std::vector<uint8_t>& certificate, |
418 scoped_ptr<media::SimpleCdmPromise> promise) { | 418 std::unique_ptr<media::SimpleCdmPromise> promise) { |
419 if (certificate.size() < media::limits::kMinCertificateLength || | 419 if (certificate.size() < media::limits::kMinCertificateLength || |
420 certificate.size() > media::limits::kMaxCertificateLength) { | 420 certificate.size() > media::limits::kMaxCertificateLength) { |
421 promise->reject( | 421 promise->reject( |
422 media::MediaKeys::INVALID_ACCESS_ERROR, 0, "Incorrect certificate."); | 422 media::MediaKeys::INVALID_ACCESS_ERROR, 0, "Incorrect certificate."); |
423 return; | 423 return; |
424 } | 424 } |
425 | 425 |
426 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 426 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
427 PP_Var certificate_array = | 427 PP_Var certificate_array = |
428 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( | 428 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( |
429 base::checked_cast<uint32_t>(certificate.size()), certificate.data()); | 429 base::checked_cast<uint32_t>(certificate.size()), certificate.data()); |
430 plugin_decryption_interface_->SetServerCertificate( | 430 plugin_decryption_interface_->SetServerCertificate( |
431 pp_instance_, promise_id, certificate_array); | 431 pp_instance_, promise_id, certificate_array); |
432 } | 432 } |
433 | 433 |
434 void ContentDecryptorDelegate::CreateSessionAndGenerateRequest( | 434 void ContentDecryptorDelegate::CreateSessionAndGenerateRequest( |
435 MediaKeys::SessionType session_type, | 435 MediaKeys::SessionType session_type, |
436 media::EmeInitDataType init_data_type, | 436 media::EmeInitDataType init_data_type, |
437 const std::vector<uint8_t>& init_data, | 437 const std::vector<uint8_t>& init_data, |
438 scoped_ptr<NewSessionCdmPromise> promise) { | 438 std::unique_ptr<NewSessionCdmPromise> promise) { |
439 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 439 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
440 PP_Var init_data_array = | 440 PP_Var init_data_array = |
441 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( | 441 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( |
442 base::checked_cast<uint32_t>(init_data.size()), init_data.data()); | 442 base::checked_cast<uint32_t>(init_data.size()), init_data.data()); |
443 plugin_decryption_interface_->CreateSessionAndGenerateRequest( | 443 plugin_decryption_interface_->CreateSessionAndGenerateRequest( |
444 pp_instance_, promise_id, MediaSessionTypeToPpSessionType(session_type), | 444 pp_instance_, promise_id, MediaSessionTypeToPpSessionType(session_type), |
445 MediaInitDataTypeToPpInitDataType(init_data_type), init_data_array); | 445 MediaInitDataTypeToPpInitDataType(init_data_type), init_data_array); |
446 } | 446 } |
447 | 447 |
448 void ContentDecryptorDelegate::LoadSession( | 448 void ContentDecryptorDelegate::LoadSession( |
449 media::MediaKeys::SessionType session_type, | 449 media::MediaKeys::SessionType session_type, |
450 const std::string& session_id, | 450 const std::string& session_id, |
451 scoped_ptr<NewSessionCdmPromise> promise) { | 451 std::unique_ptr<NewSessionCdmPromise> promise) { |
452 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 452 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
453 plugin_decryption_interface_->LoadSession( | 453 plugin_decryption_interface_->LoadSession( |
454 pp_instance_, promise_id, MediaSessionTypeToPpSessionType(session_type), | 454 pp_instance_, promise_id, MediaSessionTypeToPpSessionType(session_type), |
455 StringVar::StringToPPVar(session_id)); | 455 StringVar::StringToPPVar(session_id)); |
456 } | 456 } |
457 | 457 |
458 void ContentDecryptorDelegate::UpdateSession( | 458 void ContentDecryptorDelegate::UpdateSession( |
459 const std::string& session_id, | 459 const std::string& session_id, |
460 const std::vector<uint8_t>& response, | 460 const std::vector<uint8_t>& response, |
461 scoped_ptr<SimpleCdmPromise> promise) { | 461 std::unique_ptr<SimpleCdmPromise> promise) { |
462 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 462 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
463 PP_Var response_array = | 463 PP_Var response_array = |
464 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( | 464 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( |
465 base::checked_cast<uint32_t>(response.size()), response.data()); | 465 base::checked_cast<uint32_t>(response.size()), response.data()); |
466 plugin_decryption_interface_->UpdateSession( | 466 plugin_decryption_interface_->UpdateSession( |
467 pp_instance_, promise_id, StringVar::StringToPPVar(session_id), | 467 pp_instance_, promise_id, StringVar::StringToPPVar(session_id), |
468 response_array); | 468 response_array); |
469 } | 469 } |
470 | 470 |
471 void ContentDecryptorDelegate::CloseSession( | 471 void ContentDecryptorDelegate::CloseSession( |
472 const std::string& session_id, | 472 const std::string& session_id, |
473 scoped_ptr<SimpleCdmPromise> promise) { | 473 std::unique_ptr<SimpleCdmPromise> promise) { |
474 if (session_id.length() > media::limits::kMaxSessionIdLength) { | 474 if (session_id.length() > media::limits::kMaxSessionIdLength) { |
475 promise->reject( | 475 promise->reject( |
476 media::MediaKeys::INVALID_ACCESS_ERROR, 0, "Incorrect session."); | 476 media::MediaKeys::INVALID_ACCESS_ERROR, 0, "Incorrect session."); |
477 return; | 477 return; |
478 } | 478 } |
479 | 479 |
480 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 480 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
481 plugin_decryption_interface_->CloseSession( | 481 plugin_decryption_interface_->CloseSession( |
482 pp_instance_, promise_id, StringVar::StringToPPVar(session_id)); | 482 pp_instance_, promise_id, StringVar::StringToPPVar(session_id)); |
483 } | 483 } |
484 | 484 |
485 void ContentDecryptorDelegate::RemoveSession( | 485 void ContentDecryptorDelegate::RemoveSession( |
486 const std::string& session_id, | 486 const std::string& session_id, |
487 scoped_ptr<SimpleCdmPromise> promise) { | 487 std::unique_ptr<SimpleCdmPromise> promise) { |
488 if (session_id.length() > media::limits::kMaxSessionIdLength) { | 488 if (session_id.length() > media::limits::kMaxSessionIdLength) { |
489 promise->reject( | 489 promise->reject( |
490 media::MediaKeys::INVALID_ACCESS_ERROR, 0, "Incorrect session."); | 490 media::MediaKeys::INVALID_ACCESS_ERROR, 0, "Incorrect session."); |
491 return; | 491 return; |
492 } | 492 } |
493 | 493 |
494 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 494 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
495 plugin_decryption_interface_->RemoveSession( | 495 plugin_decryption_interface_->RemoveSession( |
496 pp_instance_, promise_id, StringVar::StringToPPVar(session_id)); | 496 pp_instance_, promise_id, StringVar::StringToPPVar(session_id)); |
497 } | 497 } |
(...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1292 empty_frames); | 1292 empty_frames); |
1293 } | 1293 } |
1294 | 1294 |
1295 if (!video_decode_cb_.is_null()) | 1295 if (!video_decode_cb_.is_null()) |
1296 video_decode_cb_.ResetAndReturn().Run(media::Decryptor::kError, NULL); | 1296 video_decode_cb_.ResetAndReturn().Run(media::Decryptor::kError, NULL); |
1297 | 1297 |
1298 cdm_promise_adapter_.Clear(); | 1298 cdm_promise_adapter_.Clear(); |
1299 } | 1299 } |
1300 | 1300 |
1301 } // namespace content | 1301 } // namespace content |
OLD | NEW |