Chromium Code Reviews| 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 "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
| 10 #include "base/metrics/sparse_histogram.h" | 10 #include "base/metrics/sparse_histogram.h" |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 285 case PP_CDMEXCEPTIONCODE_CLIENTERROR: | 285 case PP_CDMEXCEPTIONCODE_CLIENTERROR: |
| 286 return MediaKeys::CLIENT_ERROR; | 286 return MediaKeys::CLIENT_ERROR; |
| 287 case PP_CDMEXCEPTIONCODE_OUTPUTERROR: | 287 case PP_CDMEXCEPTIONCODE_OUTPUTERROR: |
| 288 return MediaKeys::OUTPUT_ERROR; | 288 return MediaKeys::OUTPUT_ERROR; |
| 289 default: | 289 default: |
| 290 NOTREACHED(); | 290 NOTREACHED(); |
| 291 return MediaKeys::UNKNOWN_ERROR; | 291 return MediaKeys::UNKNOWN_ERROR; |
| 292 } | 292 } |
| 293 } | 293 } |
| 294 | 294 |
| 295 media::CdmKeyInformation::KeyStatus PpCdmKeyStatusToCdmKeyInformationKeyStatus( | |
| 296 PP_CdmKeyStatus status) { | |
| 297 switch (status) { | |
| 298 case PP_CDMKEYSTATUS_USABLE: | |
| 299 return media::CdmKeyInformation::USABLE; | |
| 300 case PP_CDMKEYSTATUS_INVALID: | |
|
ddorwin
2015/01/09 03:27:36
We should fix the naming sometime.
jrummell
2015/01/09 17:24:28
Acknowledged.
| |
| 301 return media::CdmKeyInformation::INTERNAL_ERROR; | |
| 302 case PP_CDMKEYSTATUS_EXPIRED: | |
| 303 return media::CdmKeyInformation::EXPIRED; | |
| 304 case PP_CDMKEYSTATUS_OUTPUTNOTALLOWED: | |
|
ddorwin
2015/01/09 03:27:35
And this probably shouldn't be one word.
jrummell
2015/01/09 17:24:28
Acknowledged.
| |
| 305 return media::CdmKeyInformation::OUTPUT_NOT_ALLOWED; | |
| 306 default: | |
| 307 NOTREACHED(); | |
| 308 return media::CdmKeyInformation::INTERNAL_ERROR; | |
| 309 } | |
| 310 } | |
| 311 | |
| 295 // TODO(xhwang): Unify EME UMA reporting code when prefixed EME is deprecated. | 312 // TODO(xhwang): Unify EME UMA reporting code when prefixed EME is deprecated. |
| 296 // See http://crbug.com/412987 for details. | 313 // See http://crbug.com/412987 for details. |
| 297 void ReportSystemCodeUMA(const std::string& key_system, uint32 system_code) { | 314 void ReportSystemCodeUMA(const std::string& key_system, uint32 system_code) { |
| 298 // Sparse histogram macro does not cache the histogram, so it's safe to use | 315 // Sparse histogram macro does not cache the histogram, so it's safe to use |
| 299 // macro with non-static histogram name here. | 316 // macro with non-static histogram name here. |
| 300 UMA_HISTOGRAM_SPARSE_SLOWLY( | 317 UMA_HISTOGRAM_SPARSE_SLOWLY( |
| 301 "Media.EME." + media::GetKeySystemNameForUMA(key_system) + ".SystemCode", | 318 "Media.EME." + media::GetKeySystemNameForUMA(key_system) + ".SystemCode", |
| 302 system_code); | 319 system_code); |
| 303 } | 320 } |
| 304 | 321 |
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 747 std::vector<uint8> message_vector; | 764 std::vector<uint8> message_vector; |
| 748 if (message_array_buffer) { | 765 if (message_array_buffer) { |
| 749 const uint8* data = static_cast<const uint8*>(message_array_buffer->Map()); | 766 const uint8* data = static_cast<const uint8*>(message_array_buffer->Map()); |
| 750 message_vector.assign(data, data + message_array_buffer->ByteLength()); | 767 message_vector.assign(data, data + message_array_buffer->ByteLength()); |
| 751 } | 768 } |
| 752 | 769 |
| 753 session_message_cb_.Run(web_session_id_string->value(), message_vector, | 770 session_message_cb_.Run(web_session_id_string->value(), message_vector, |
| 754 GURL::EmptyGURL()); | 771 GURL::EmptyGURL()); |
| 755 } | 772 } |
| 756 | 773 |
| 757 // TODO(jrummell): Decode |key_information| and pass it to the callback. | |
| 758 void ContentDecryptorDelegate::OnSessionKeysChange( | 774 void ContentDecryptorDelegate::OnSessionKeysChange( |
| 759 PP_Var web_session_id, | 775 PP_Var web_session_id, |
| 760 PP_Bool has_additional_usable_key, | 776 PP_Bool has_additional_usable_key, |
| 761 uint32_t key_count, | 777 uint32_t key_count, |
| 762 const struct PP_KeyInformation key_information[]) { | 778 const struct PP_KeyInformation key_information[]) { |
| 763 if (session_keys_change_cb_.is_null()) | 779 if (session_keys_change_cb_.is_null()) |
| 764 return; | 780 return; |
| 765 | 781 |
| 766 StringVar* web_session_id_string = StringVar::FromPPVar(web_session_id); | 782 StringVar* web_session_id_string = StringVar::FromPPVar(web_session_id); |
| 767 DCHECK(web_session_id_string); | 783 DCHECK(web_session_id_string); |
| 768 | 784 |
| 769 // TODO(jrummell): Pass key information through Pepper. | 785 media::CdmKeysInfo keys_info; |
| 786 keys_info.reserve(key_count); | |
| 787 for (uint32_t i = 0; i < key_count; ++i) { | |
| 788 scoped_ptr<media::CdmKeyInformation> key_info(new media::CdmKeyInformation); | |
| 789 key_info->key_id.assign( | |
| 790 key_information[i].key_id, | |
|
ddorwin
2015/01/09 03:27:36
nit: With 5 references to it, you might consider m
jrummell
2015/01/09 17:24:28
Done. I would think the compilers are smart enough
| |
| 791 key_information[i].key_id + key_information[i].key_id_size); | |
| 792 key_info->status = PpCdmKeyStatusToCdmKeyInformationKeyStatus( | |
| 793 key_information[i].key_status); | |
| 794 key_info->system_code = key_information[i].system_code; | |
| 795 keys_info.push_back(key_info.release()); | |
| 796 } | |
| 797 | |
| 770 session_keys_change_cb_.Run(web_session_id_string->value(), | 798 session_keys_change_cb_.Run(web_session_id_string->value(), |
| 771 PP_ToBool(has_additional_usable_key), | 799 PP_ToBool(has_additional_usable_key), |
| 772 media::CdmKeysInfo()); | 800 keys_info.Pass()); |
| 773 } | 801 } |
| 774 | 802 |
| 775 void ContentDecryptorDelegate::OnSessionExpirationChange( | 803 void ContentDecryptorDelegate::OnSessionExpirationChange( |
| 776 PP_Var web_session_id, | 804 PP_Var web_session_id, |
| 777 PP_Time new_expiry_time) { | 805 PP_Time new_expiry_time) { |
| 778 if (session_expiration_update_cb_.is_null()) | 806 if (session_expiration_update_cb_.is_null()) |
| 779 return; | 807 return; |
| 780 | 808 |
| 781 StringVar* web_session_id_string = StringVar::FromPPVar(web_session_id); | 809 StringVar* web_session_id_string = StringVar::FromPPVar(web_session_id); |
| 782 DCHECK(web_session_id_string); | 810 DCHECK(web_session_id_string); |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1258 | 1286 |
| 1259 scoped_ptr<CdmPromise> ContentDecryptorDelegate::TakePromise( | 1287 scoped_ptr<CdmPromise> ContentDecryptorDelegate::TakePromise( |
| 1260 uint32_t promise_id) { | 1288 uint32_t promise_id) { |
| 1261 PromiseMap::iterator it = promises_.find(promise_id); | 1289 PromiseMap::iterator it = promises_.find(promise_id); |
| 1262 if (it == promises_.end()) | 1290 if (it == promises_.end()) |
| 1263 return scoped_ptr<CdmPromise>(); | 1291 return scoped_ptr<CdmPromise>(); |
| 1264 return promises_.take_and_erase(it); | 1292 return promises_.take_and_erase(it); |
| 1265 } | 1293 } |
| 1266 | 1294 |
| 1267 } // namespace content | 1295 } // namespace content |
| OLD | NEW |