OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/cdm/ppapi/cdm_adapter.h" | 5 #include "media/cdm/ppapi/cdm_adapter.h" |
6 | 6 |
7 #include "media/base/limits.h" | 7 #include "media/base/limits.h" |
8 #include "media/cdm/ppapi/cdm_file_io_impl.h" | 8 #include "media/cdm/ppapi/cdm_file_io_impl.h" |
9 #include "media/cdm/ppapi/cdm_helpers.h" | 9 #include "media/cdm/ppapi/cdm_helpers.h" |
10 #include "media/cdm/ppapi/cdm_logging.h" | 10 #include "media/cdm/ppapi/cdm_logging.h" |
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 &CdmAdapter::SendPromiseRejectedInternal, | 708 &CdmAdapter::SendPromiseRejectedInternal, |
709 promise_id, | 709 promise_id, |
710 SessionError(error, system_code, error_message))); | 710 SessionError(error, system_code, error_message))); |
711 } | 711 } |
712 | 712 |
713 // cdm::Host_7 only. | 713 // cdm::Host_7 only. |
714 void CdmAdapter::OnSessionMessage(const char* session_id, | 714 void CdmAdapter::OnSessionMessage(const char* session_id, |
715 uint32_t session_id_size, | 715 uint32_t session_id_size, |
716 cdm::MessageType message_type, | 716 cdm::MessageType message_type, |
717 const char* message, | 717 const char* message, |
718 uint32_t message_size) { | 718 uint32_t message_size, |
| 719 const char* legacy_destination_url, |
| 720 uint32_t legacy_destination_url_size) { |
| 721 // Only license renewals should specify |legacy_destination_url|. |
| 722 // |legacy_destination_url| is not passed to unprefixed EME applications, |
| 723 // so it can be removed when the prefixed API is removed. |
| 724 PP_DCHECK(legacy_destination_url_size == 0 || |
| 725 message_type == cdm::MessageType::kLicenseRenewal); |
| 726 |
719 PostOnMain(callback_factory_.NewCallback( | 727 PostOnMain(callback_factory_.NewCallback( |
720 &CdmAdapter::SendSessionMessageInternal, | 728 &CdmAdapter::SendSessionMessageInternal, |
721 std::string(session_id, session_id_size), message_type, | 729 SessionMessage( |
722 std::vector<uint8_t>(message, message + message_size))); | 730 std::string(session_id, session_id_size), message_type, |
| 731 std::vector<uint8_t>(message, message + message_size), |
| 732 std::string(legacy_destination_url, legacy_destination_url_size)))); |
723 } | 733 } |
724 | 734 |
725 // cdm::Host_6 only. | 735 // cdm::Host_6 only. |
726 void CdmAdapter::OnSessionMessage(const char* session_id, | 736 void CdmAdapter::OnSessionMessage(const char* session_id, |
727 uint32_t session_id_size, | 737 uint32_t session_id_size, |
728 const char* message, | 738 const char* message, |
729 uint32_t message_size, | 739 uint32_t message_size, |
730 const char* destination_url, | 740 const char* destination_url, |
731 uint32_t destination_url_size) { | 741 uint32_t destination_url_size) { |
732 // |destination_url| is no longer passed to EME applications, so it is | 742 // |destination_url| is no longer passed to unprefixed EME applications, |
733 // dropped. All messages will appear as license renewals if |destination_url| | 743 // so it will be dropped. All messages will appear as license renewals |
734 // is provided, license request if not. | 744 // if |destination_url| is provided, license request if not. |
735 cdm::MessageType message_type = (destination_url_size > 0) | 745 cdm::MessageType message_type = (destination_url_size > 0) |
736 ? cdm::MessageType::kLicenseRenewal | 746 ? cdm::MessageType::kLicenseRenewal |
737 : cdm::MessageType::kLicenseRequest; | 747 : cdm::MessageType::kLicenseRequest; |
738 PostOnMain(callback_factory_.NewCallback( | 748 PostOnMain(callback_factory_.NewCallback( |
739 &CdmAdapter::SendSessionMessageInternal, | 749 &CdmAdapter::SendSessionMessageInternal, |
740 std::string(session_id, session_id_size), message_type, | 750 SessionMessage(std::string(session_id, session_id_size), message_type, |
741 std::vector<uint8_t>(message, message + message_size))); | 751 std::vector<uint8_t>(message, message + message_size), |
| 752 std::string(destination_url, destination_url_size)))); |
742 } | 753 } |
743 | 754 |
744 // cdm::Host_7 only. | 755 // cdm::Host_7 only. |
745 void CdmAdapter::OnSessionKeysChange(const char* session_id, | 756 void CdmAdapter::OnSessionKeysChange(const char* session_id, |
746 uint32_t session_id_size, | 757 uint32_t session_id_size, |
747 bool has_additional_usable_key, | 758 bool has_additional_usable_key, |
748 const cdm::KeyInformation* keys_info, | 759 const cdm::KeyInformation* keys_info, |
749 uint32_t keys_info_count) { | 760 uint32_t keys_info_count) { |
750 std::vector<PP_KeyInformation> key_information; | 761 std::vector<PP_KeyInformation> key_information; |
751 for (uint32_t i = 0; i < keys_info_count; ++i) { | 762 for (uint32_t i = 0; i < keys_info_count; ++i) { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
844 uint32_t promise_id, | 855 uint32_t promise_id, |
845 const SessionError& error) { | 856 const SessionError& error) { |
846 PP_DCHECK(result == PP_OK); | 857 PP_DCHECK(result == PP_OK); |
847 pp::ContentDecryptor_Private::PromiseRejected( | 858 pp::ContentDecryptor_Private::PromiseRejected( |
848 promise_id, | 859 promise_id, |
849 CdmExceptionTypeToPpCdmExceptionType(error.error), | 860 CdmExceptionTypeToPpCdmExceptionType(error.error), |
850 error.system_code, | 861 error.system_code, |
851 error.error_description); | 862 error.error_description); |
852 } | 863 } |
853 | 864 |
854 void CdmAdapter::SendSessionMessageInternal( | 865 void CdmAdapter::SendSessionMessageInternal(int32_t result, |
855 int32_t result, | 866 const SessionMessage& message) { |
856 const std::string& session_id, | |
857 cdm::MessageType message_type, | |
858 const std::vector<uint8_t>& message) { | |
859 PP_DCHECK(result == PP_OK); | 867 PP_DCHECK(result == PP_OK); |
860 | 868 |
861 pp::VarArrayBuffer message_array_buffer(message.size()); | 869 pp::VarArrayBuffer message_array_buffer(message.message.size()); |
862 if (message.size() > 0) { | 870 if (message.message.size() > 0) { |
863 memcpy(message_array_buffer.Map(), message.data(), message.size()); | 871 memcpy(message_array_buffer.Map(), message.message.data(), |
| 872 message.message.size()); |
864 } | 873 } |
865 | 874 |
866 pp::ContentDecryptor_Private::SessionMessage( | 875 pp::ContentDecryptor_Private::SessionMessage( |
867 session_id, CdmMessageTypeToPpMessageType(message_type), | 876 message.session_id, CdmMessageTypeToPpMessageType(message.message_type), |
868 message_array_buffer); | 877 message_array_buffer, message.legacy_destination_url); |
869 } | 878 } |
870 | 879 |
871 void CdmAdapter::SendSessionClosedInternal(int32_t result, | 880 void CdmAdapter::SendSessionClosedInternal(int32_t result, |
872 const std::string& session_id) { | 881 const std::string& session_id) { |
873 PP_DCHECK(result == PP_OK); | 882 PP_DCHECK(result == PP_OK); |
874 pp::ContentDecryptor_Private::SessionClosed(session_id); | 883 pp::ContentDecryptor_Private::SessionClosed(session_id); |
875 } | 884 } |
876 | 885 |
877 void CdmAdapter::SendSessionErrorInternal(int32_t result, | 886 void CdmAdapter::SendSessionErrorInternal(int32_t result, |
878 const std::string& session_id, | 887 const std::string& session_id, |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1299 #endif | 1308 #endif |
1300 | 1309 |
1301 CdmAdapter::SessionError::SessionError(cdm::Error error, | 1310 CdmAdapter::SessionError::SessionError(cdm::Error error, |
1302 uint32_t system_code, | 1311 uint32_t system_code, |
1303 std::string error_description) | 1312 std::string error_description) |
1304 : error(error), | 1313 : error(error), |
1305 system_code(system_code), | 1314 system_code(system_code), |
1306 error_description(error_description) { | 1315 error_description(error_description) { |
1307 } | 1316 } |
1308 | 1317 |
| 1318 CdmAdapter::SessionMessage::SessionMessage(std::string session_id, |
| 1319 cdm::MessageType message_type, |
| 1320 std::vector<uint8_t> message, |
| 1321 std::string legacy_destination_url) |
| 1322 : session_id(session_id), |
| 1323 message_type(message_type), |
| 1324 message(message), |
| 1325 legacy_destination_url(legacy_destination_url) { |
| 1326 } |
| 1327 |
1309 void* GetCdmHost(int host_interface_version, void* user_data) { | 1328 void* GetCdmHost(int host_interface_version, void* user_data) { |
1310 if (!host_interface_version || !user_data) | 1329 if (!host_interface_version || !user_data) |
1311 return NULL; | 1330 return NULL; |
1312 | 1331 |
1313 static_assert( | 1332 static_assert( |
1314 cdm::ContentDecryptionModule::Host::kVersion == cdm::Host_7::kVersion, | 1333 cdm::ContentDecryptionModule::Host::kVersion == cdm::Host_7::kVersion, |
1315 "update the code below"); | 1334 "update the code below"); |
1316 | 1335 |
1317 // Ensure IsSupportedCdmHostVersion matches implementation of this function. | 1336 // Ensure IsSupportedCdmHostVersion matches implementation of this function. |
1318 // Always update this DCHECK when updating this function. | 1337 // Always update this DCHECK when updating this function. |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1367 } // namespace media | 1386 } // namespace media |
1368 | 1387 |
1369 namespace pp { | 1388 namespace pp { |
1370 | 1389 |
1371 // Factory function for your specialization of the Module object. | 1390 // Factory function for your specialization of the Module object. |
1372 Module* CreateModule() { | 1391 Module* CreateModule() { |
1373 return new media::CdmAdapterModule(); | 1392 return new media::CdmAdapterModule(); |
1374 } | 1393 } |
1375 | 1394 |
1376 } // namespace pp | 1395 } // namespace pp |
OLD | NEW |