| 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 |