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 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 ContentDecryptorDelegate::~ContentDecryptorDelegate() { | 378 ContentDecryptorDelegate::~ContentDecryptorDelegate() { |
379 SatisfyAllPendingCallbacksOnError(); | 379 SatisfyAllPendingCallbacksOnError(); |
380 } | 380 } |
381 | 381 |
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, | |
389 const media::SessionKeysChangeCB& session_keys_change_cb, | 388 const media::SessionKeysChangeCB& session_keys_change_cb, |
390 const media::SessionExpirationUpdateCB& session_expiration_update_cb, | 389 const media::SessionExpirationUpdateCB& session_expiration_update_cb, |
391 const base::Closure& fatal_plugin_error_cb, | 390 const base::Closure& fatal_plugin_error_cb, |
392 std::unique_ptr<media::SimpleCdmPromise> promise) { | 391 std::unique_ptr<media::SimpleCdmPromise> promise) { |
393 DCHECK(!key_system.empty()); | 392 DCHECK(!key_system.empty()); |
394 DCHECK(key_system_.empty()); | 393 DCHECK(key_system_.empty()); |
395 key_system_ = key_system; | 394 key_system_ = key_system; |
396 | 395 |
397 session_message_cb_ = session_message_cb; | 396 session_message_cb_ = session_message_cb; |
398 session_closed_cb_ = session_closed_cb; | 397 session_closed_cb_ = session_closed_cb; |
399 legacy_session_error_cb_ = legacy_session_error_cb; | |
400 session_keys_change_cb_ = session_keys_change_cb; | 398 session_keys_change_cb_ = session_keys_change_cb; |
401 session_expiration_update_cb_ = session_expiration_update_cb; | 399 session_expiration_update_cb_ = session_expiration_update_cb; |
402 fatal_plugin_error_cb_ = fatal_plugin_error_cb; | 400 fatal_plugin_error_cb_ = fatal_plugin_error_cb; |
403 | 401 |
404 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); | 402 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
405 plugin_decryption_interface_->Initialize( | 403 plugin_decryption_interface_->Initialize( |
406 pp_instance_, promise_id, StringVar::StringToPPVar(key_system_), | 404 pp_instance_, promise_id, StringVar::StringToPPVar(key_system_), |
407 PP_FromBool(allow_distinctive_identifier), | 405 PP_FromBool(allow_distinctive_identifier), |
408 PP_FromBool(allow_persistent_state)); | 406 PP_FromBool(allow_persistent_state)); |
409 } | 407 } |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 | 755 |
758 StringVar* error_description_string = StringVar::FromPPVar(error_description); | 756 StringVar* error_description_string = StringVar::FromPPVar(error_description); |
759 DCHECK(error_description_string); | 757 DCHECK(error_description_string); |
760 cdm_promise_adapter_.RejectPromise( | 758 cdm_promise_adapter_.RejectPromise( |
761 promise_id, PpExceptionTypeToMediaException(exception_code), system_code, | 759 promise_id, PpExceptionTypeToMediaException(exception_code), system_code, |
762 error_description_string->value()); | 760 error_description_string->value()); |
763 } | 761 } |
764 | 762 |
765 void ContentDecryptorDelegate::OnSessionMessage(PP_Var session_id, | 763 void ContentDecryptorDelegate::OnSessionMessage(PP_Var session_id, |
766 PP_CdmMessageType message_type, | 764 PP_CdmMessageType message_type, |
767 PP_Var message, | 765 PP_Var message) { |
768 PP_Var legacy_destination_url) { | |
769 if (session_message_cb_.is_null()) | 766 if (session_message_cb_.is_null()) |
770 return; | 767 return; |
771 | 768 |
772 StringVar* session_id_string = StringVar::FromPPVar(session_id); | 769 StringVar* session_id_string = StringVar::FromPPVar(session_id); |
773 DCHECK(session_id_string); | 770 DCHECK(session_id_string); |
774 | 771 |
775 ArrayBufferVar* message_array_buffer = ArrayBufferVar::FromPPVar(message); | 772 ArrayBufferVar* message_array_buffer = ArrayBufferVar::FromPPVar(message); |
776 std::vector<uint8_t> message_vector; | 773 std::vector<uint8_t> message_vector; |
777 if (message_array_buffer) { | 774 if (message_array_buffer) { |
778 const uint8_t* data = | 775 const uint8_t* data = |
779 static_cast<const uint8_t*>(message_array_buffer->Map()); | 776 static_cast<const uint8_t*>(message_array_buffer->Map()); |
780 message_vector.assign(data, data + message_array_buffer->ByteLength()); | 777 message_vector.assign(data, data + message_array_buffer->ByteLength()); |
781 } | 778 } |
782 | 779 |
783 StringVar* destination_url_string = | |
784 StringVar::FromPPVar(legacy_destination_url); | |
785 if (!destination_url_string) { | |
786 NOTREACHED(); | |
787 return; | |
788 } | |
789 | |
790 GURL verified_gurl = GURL(destination_url_string->value()); | |
791 if (!verified_gurl.is_valid()) { | |
792 DLOG(WARNING) << "SessionMessage legacy_destination_url is invalid : " | |
793 << verified_gurl.possibly_invalid_spec(); | |
794 verified_gurl = GURL::EmptyGURL(); // Replace invalid destination_url. | |
795 } | |
796 | |
797 session_message_cb_.Run(session_id_string->value(), | 780 session_message_cb_.Run(session_id_string->value(), |
798 PpCdmMessageTypeToMediaMessageType(message_type), | 781 PpCdmMessageTypeToMediaMessageType(message_type), |
799 message_vector, verified_gurl); | 782 message_vector); |
800 } | 783 } |
801 | 784 |
802 void ContentDecryptorDelegate::OnSessionKeysChange( | 785 void ContentDecryptorDelegate::OnSessionKeysChange( |
803 PP_Var session_id, | 786 PP_Var session_id, |
804 PP_Bool has_additional_usable_key, | 787 PP_Bool has_additional_usable_key, |
805 uint32_t key_count, | 788 uint32_t key_count, |
806 const struct PP_KeyInformation key_information[]) { | 789 const struct PP_KeyInformation key_information[]) { |
807 if (session_keys_change_cb_.is_null()) | 790 if (session_keys_change_cb_.is_null()) |
808 return; | 791 return; |
809 | 792 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 void ContentDecryptorDelegate::OnSessionClosed(PP_Var session_id) { | 824 void ContentDecryptorDelegate::OnSessionClosed(PP_Var session_id) { |
842 if (session_closed_cb_.is_null()) | 825 if (session_closed_cb_.is_null()) |
843 return; | 826 return; |
844 | 827 |
845 StringVar* session_id_string = StringVar::FromPPVar(session_id); | 828 StringVar* session_id_string = StringVar::FromPPVar(session_id); |
846 DCHECK(session_id_string); | 829 DCHECK(session_id_string); |
847 | 830 |
848 session_closed_cb_.Run(session_id_string->value()); | 831 session_closed_cb_.Run(session_id_string->value()); |
849 } | 832 } |
850 | 833 |
851 void ContentDecryptorDelegate::OnLegacySessionError( | |
852 PP_Var session_id, | |
853 PP_CdmExceptionCode exception_code, | |
854 uint32_t system_code, | |
855 PP_Var error_description) { | |
856 ReportSystemCodeUMA(key_system_, system_code); | |
857 | |
858 if (legacy_session_error_cb_.is_null()) | |
859 return; | |
860 | |
861 StringVar* session_id_string = StringVar::FromPPVar(session_id); | |
862 DCHECK(session_id_string); | |
863 | |
864 StringVar* error_description_string = StringVar::FromPPVar(error_description); | |
865 DCHECK(error_description_string); | |
866 | |
867 legacy_session_error_cb_.Run(session_id_string->value(), | |
868 PpExceptionTypeToMediaException(exception_code), | |
869 system_code, error_description_string->value()); | |
870 } | |
871 | |
872 void ContentDecryptorDelegate::DecoderInitializeDone( | 834 void ContentDecryptorDelegate::DecoderInitializeDone( |
873 PP_DecryptorStreamType decoder_type, | 835 PP_DecryptorStreamType decoder_type, |
874 uint32_t request_id, | 836 uint32_t request_id, |
875 PP_Bool success) { | 837 PP_Bool success) { |
876 if (decoder_type == PP_DECRYPTORSTREAMTYPE_AUDIO) { | 838 if (decoder_type == PP_DECRYPTORSTREAMTYPE_AUDIO) { |
877 // If the request ID is not valid or does not match what's saved, do | 839 // If the request ID is not valid or does not match what's saved, do |
878 // nothing. | 840 // nothing. |
879 if (request_id == 0 || !audio_decoder_init_cb_.Matches(request_id)) | 841 if (request_id == 0 || !audio_decoder_init_cb_.Matches(request_id)) |
880 return; | 842 return; |
881 | 843 |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1292 empty_frames); | 1254 empty_frames); |
1293 } | 1255 } |
1294 | 1256 |
1295 if (!video_decode_cb_.is_null()) | 1257 if (!video_decode_cb_.is_null()) |
1296 video_decode_cb_.ResetAndReturn().Run(media::Decryptor::kError, NULL); | 1258 video_decode_cb_.ResetAndReturn().Run(media::Decryptor::kError, NULL); |
1297 | 1259 |
1298 cdm_promise_adapter_.Clear(); | 1260 cdm_promise_adapter_.Clear(); |
1299 } | 1261 } |
1300 | 1262 |
1301 } // namespace content | 1263 } // namespace content |
OLD | NEW |