| 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 "content/renderer/media/webmediaplayer_impl.h" | 5 #include "content/renderer/media/webmediaplayer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 // performance will be better when it is added than not. | 667 // performance will be better when it is added than not. |
| 668 web_graphics_context->flush(); | 668 web_graphics_context->flush(); |
| 669 return true; | 669 return true; |
| 670 } | 670 } |
| 671 | 671 |
| 672 // Helper functions to report media EME related stats to UMA. They follow the | 672 // Helper functions to report media EME related stats to UMA. They follow the |
| 673 // convention of more commonly used macros UMA_HISTOGRAM_ENUMERATION and | 673 // convention of more commonly used macros UMA_HISTOGRAM_ENUMERATION and |
| 674 // UMA_HISTOGRAM_COUNTS. The reason that we cannot use those macros directly is | 674 // UMA_HISTOGRAM_COUNTS. The reason that we cannot use those macros directly is |
| 675 // that UMA_* macros require the names to be constant throughout the process' | 675 // that UMA_* macros require the names to be constant throughout the process' |
| 676 // lifetime. | 676 // lifetime. |
| 677 static void EmeUMAHistogramEnumeration(const blink::WebString& key_system, | 677 static void EmeUMAHistogramEnumeration(const std::string& key_system, |
| 678 const std::string& method, | 678 const std::string& method, |
| 679 int sample, | 679 int sample, |
| 680 int boundary_value) { | 680 int boundary_value) { |
| 681 base::LinearHistogram::FactoryGet( | 681 base::LinearHistogram::FactoryGet( |
| 682 kMediaEme + KeySystemNameForUMA(key_system) + "." + method, | 682 kMediaEme + KeySystemNameForUMA(key_system) + "." + method, |
| 683 1, boundary_value, boundary_value + 1, | 683 1, boundary_value, boundary_value + 1, |
| 684 base::Histogram::kUmaTargetedHistogramFlag)->Add(sample); | 684 base::Histogram::kUmaTargetedHistogramFlag)->Add(sample); |
| 685 } | 685 } |
| 686 | 686 |
| 687 static void EmeUMAHistogramCounts(const blink::WebString& key_system, | 687 static void EmeUMAHistogramCounts(const std::string& key_system, |
| 688 const std::string& method, | 688 const std::string& method, |
| 689 int sample) { | 689 int sample) { |
| 690 // Use the same parameters as UMA_HISTOGRAM_COUNTS. | 690 // Use the same parameters as UMA_HISTOGRAM_COUNTS. |
| 691 base::Histogram::FactoryGet( | 691 base::Histogram::FactoryGet( |
| 692 kMediaEme + KeySystemNameForUMA(key_system) + "." + method, | 692 kMediaEme + KeySystemNameForUMA(key_system) + "." + method, |
| 693 1, 1000000, 50, base::Histogram::kUmaTargetedHistogramFlag)->Add(sample); | 693 1, 1000000, 50, base::Histogram::kUmaTargetedHistogramFlag)->Add(sample); |
| 694 } | 694 } |
| 695 | 695 |
| 696 // Helper enum for reporting generateKeyRequest/addKey histograms. | 696 // Helper enum for reporting generateKeyRequest/addKey histograms. |
| 697 enum MediaKeyException { | 697 enum MediaKeyException { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 713 return kSuccess; | 713 return kSuccess; |
| 714 default: | 714 default: |
| 715 return kUnknownResultId; | 715 return kUnknownResultId; |
| 716 } | 716 } |
| 717 } | 717 } |
| 718 | 718 |
| 719 // Helper for converting |key_system| name and exception |e| to a pair of enum | 719 // Helper for converting |key_system| name and exception |e| to a pair of enum |
| 720 // values from above, for reporting to UMA. | 720 // values from above, for reporting to UMA. |
| 721 static void ReportMediaKeyExceptionToUMA( | 721 static void ReportMediaKeyExceptionToUMA( |
| 722 const std::string& method, | 722 const std::string& method, |
| 723 const WebString& key_system, | 723 const std::string& key_system, |
| 724 WebMediaPlayer::MediaKeyException e) { | 724 WebMediaPlayer::MediaKeyException e) { |
| 725 MediaKeyException result_id = MediaKeyExceptionForUMA(e); | 725 MediaKeyException result_id = MediaKeyExceptionForUMA(e); |
| 726 DCHECK_NE(result_id, kUnknownResultId) << e; | 726 DCHECK_NE(result_id, kUnknownResultId) << e; |
| 727 EmeUMAHistogramEnumeration( | 727 EmeUMAHistogramEnumeration( |
| 728 key_system, method, result_id, kMaxMediaKeyException); | 728 key_system, method, result_id, kMaxMediaKeyException); |
| 729 } | 729 } |
| 730 | 730 |
| 731 // Convert a WebString to ASCII, falling back on an empty string in the case |
| 732 // of a non-ASCII string. |
| 733 static std::string ToASCIIOrEmpty(const blink::WebString& string) { |
| 734 return IsStringASCII(string) ? UTF16ToASCII(string) : std::string(); |
| 735 } |
| 736 |
| 731 WebMediaPlayer::MediaKeyException | 737 WebMediaPlayer::MediaKeyException |
| 732 WebMediaPlayerImpl::generateKeyRequest(const WebString& key_system, | 738 WebMediaPlayerImpl::generateKeyRequest(const WebString& key_system, |
| 733 const unsigned char* init_data, | 739 const unsigned char* init_data, |
| 734 unsigned init_data_length) { | 740 unsigned init_data_length) { |
| 741 DVLOG(1) << "generateKeyRequest: " << base::string16(key_system) << ": " |
| 742 << std::string(reinterpret_cast<const char*>(init_data), |
| 743 static_cast<size_t>(init_data_length)); |
| 744 |
| 745 std::string ascii_key_system = ToASCIIOrEmpty(key_system); |
| 746 |
| 735 WebMediaPlayer::MediaKeyException e = | 747 WebMediaPlayer::MediaKeyException e = |
| 736 GenerateKeyRequestInternal(key_system, init_data, init_data_length); | 748 GenerateKeyRequestInternal(ascii_key_system, init_data, init_data_length); |
| 737 ReportMediaKeyExceptionToUMA("generateKeyRequest", key_system, e); | 749 ReportMediaKeyExceptionToUMA("generateKeyRequest", ascii_key_system, e); |
| 738 return e; | 750 return e; |
| 739 } | 751 } |
| 740 | 752 |
| 741 WebMediaPlayer::MediaKeyException | 753 WebMediaPlayer::MediaKeyException |
| 742 WebMediaPlayerImpl::GenerateKeyRequestInternal( | 754 WebMediaPlayerImpl::GenerateKeyRequestInternal( |
| 743 const WebString& key_system, | 755 const std::string& key_system, |
| 744 const unsigned char* init_data, | 756 const unsigned char* init_data, |
| 745 unsigned init_data_length) { | 757 unsigned init_data_length) { |
| 746 DCHECK(main_loop_->BelongsToCurrentThread()); | 758 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 747 | 759 |
| 748 DVLOG(1) << "generateKeyRequest: " << key_system.utf8().data() << ": " | |
| 749 << std::string(reinterpret_cast<const char*>(init_data), | |
| 750 static_cast<size_t>(init_data_length)); | |
| 751 | |
| 752 if (!IsConcreteSupportedKeySystem(key_system)) | 760 if (!IsConcreteSupportedKeySystem(key_system)) |
| 753 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; | 761 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; |
| 754 | 762 |
| 755 // We do not support run-time switching between key systems for now. | 763 // We do not support run-time switching between key systems for now. |
| 756 if (current_key_system_.isEmpty()) { | 764 if (current_key_system_.empty()) { |
| 757 if (!proxy_decryptor_) { | 765 if (!proxy_decryptor_) { |
| 758 proxy_decryptor_.reset(new ProxyDecryptor( | 766 proxy_decryptor_.reset(new ProxyDecryptor( |
| 759 #if defined(ENABLE_PEPPER_CDMS) | 767 #if defined(ENABLE_PEPPER_CDMS) |
| 760 client_, | 768 client_, |
| 761 frame_, | 769 frame_, |
| 762 #endif | 770 #endif |
| 763 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyAdded), | 771 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyAdded), |
| 764 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyError), | 772 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyError), |
| 765 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyMessage))); | 773 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyMessage))); |
| 766 } | 774 } |
| 767 | 775 |
| 768 if (!proxy_decryptor_->InitializeCDM(key_system.utf8(), | 776 if (!proxy_decryptor_->InitializeCDM(key_system, |
| 769 frame_->document().url())) | 777 frame_->document().url())) |
| 770 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; | 778 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; |
| 771 | 779 |
| 772 if (proxy_decryptor_ && !decryptor_ready_cb_.is_null()) { | 780 if (proxy_decryptor_ && !decryptor_ready_cb_.is_null()) { |
| 773 base::ResetAndReturn(&decryptor_ready_cb_) | 781 base::ResetAndReturn(&decryptor_ready_cb_) |
| 774 .Run(proxy_decryptor_->GetDecryptor()); | 782 .Run(proxy_decryptor_->GetDecryptor()); |
| 775 } | 783 } |
| 776 | 784 |
| 777 current_key_system_ = key_system; | 785 current_key_system_ = key_system; |
| 778 } else if (key_system != current_key_system_) { | 786 } else if (key_system != current_key_system_) { |
| 779 return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; | 787 return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; |
| 780 } | 788 } |
| 781 | 789 |
| 782 // TODO(xhwang): We assume all streams are from the same container (thus have | 790 // TODO(xhwang): We assume all streams are from the same container (thus have |
| 783 // the same "type") for now. In the future, the "type" should be passed down | 791 // the same "type") for now. In the future, the "type" should be passed down |
| 784 // from the application. | 792 // from the application. |
| 785 if (!proxy_decryptor_->GenerateKeyRequest( | 793 if (!proxy_decryptor_->GenerateKeyRequest( |
| 786 init_data_type_, init_data, init_data_length)) { | 794 init_data_type_, init_data, init_data_length)) { |
| 787 current_key_system_.reset(); | 795 current_key_system_.clear(); |
| 788 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; | 796 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; |
| 789 } | 797 } |
| 790 | 798 |
| 791 return WebMediaPlayer::MediaKeyExceptionNoError; | 799 return WebMediaPlayer::MediaKeyExceptionNoError; |
| 792 } | 800 } |
| 793 | 801 |
| 794 WebMediaPlayer::MediaKeyException WebMediaPlayerImpl::addKey( | 802 WebMediaPlayer::MediaKeyException WebMediaPlayerImpl::addKey( |
| 795 const WebString& key_system, | 803 const WebString& key_system, |
| 796 const unsigned char* key, | 804 const unsigned char* key, |
| 797 unsigned key_length, | 805 unsigned key_length, |
| 798 const unsigned char* init_data, | 806 const unsigned char* init_data, |
| 799 unsigned init_data_length, | 807 unsigned init_data_length, |
| 800 const WebString& session_id) { | 808 const WebString& session_id) { |
| 801 WebMediaPlayer::MediaKeyException e = AddKeyInternal( | 809 DVLOG(1) << "addKey: " << base::string16(key_system) << ": " |
| 802 key_system, key, key_length, init_data, init_data_length, session_id); | 810 << std::string(reinterpret_cast<const char*>(key), |
| 803 ReportMediaKeyExceptionToUMA("addKey", key_system, e); | 811 static_cast<size_t>(key_length)) << ", " |
| 812 << std::string(reinterpret_cast<const char*>(init_data), |
| 813 static_cast<size_t>(init_data_length)) |
| 814 << " [" << base::string16(session_id) << "]"; |
| 815 |
| 816 std::string ascii_key_system = ToASCIIOrEmpty(key_system); |
| 817 std::string ascii_session_id = ToASCIIOrEmpty(session_id); |
| 818 |
| 819 WebMediaPlayer::MediaKeyException e = AddKeyInternal(ascii_key_system, |
| 820 key, |
| 821 key_length, |
| 822 init_data, |
| 823 init_data_length, |
| 824 ascii_session_id); |
| 825 ReportMediaKeyExceptionToUMA("addKey", ascii_key_system, e); |
| 804 return e; | 826 return e; |
| 805 } | 827 } |
| 806 | 828 |
| 807 WebMediaPlayer::MediaKeyException WebMediaPlayerImpl::AddKeyInternal( | 829 WebMediaPlayer::MediaKeyException WebMediaPlayerImpl::AddKeyInternal( |
| 808 const WebString& key_system, | 830 const std::string& key_system, |
| 809 const unsigned char* key, | 831 const unsigned char* key, |
| 810 unsigned key_length, | 832 unsigned key_length, |
| 811 const unsigned char* init_data, | 833 const unsigned char* init_data, |
| 812 unsigned init_data_length, | 834 unsigned init_data_length, |
| 813 const WebString& session_id) { | 835 const std::string& session_id) { |
| 814 DCHECK(key); | 836 DCHECK(key); |
| 815 DCHECK_GT(key_length, 0u); | 837 DCHECK_GT(key_length, 0u); |
| 816 DVLOG(1) << "addKey: " << key_system.utf8().data() << ": " | |
| 817 << std::string(reinterpret_cast<const char*>(key), | |
| 818 static_cast<size_t>(key_length)) << ", " | |
| 819 << std::string(reinterpret_cast<const char*>(init_data), | |
| 820 static_cast<size_t>(init_data_length)) | |
| 821 << " [" << session_id.utf8().data() << "]"; | |
| 822 | |
| 823 | 838 |
| 824 if (!IsConcreteSupportedKeySystem(key_system)) | 839 if (!IsConcreteSupportedKeySystem(key_system)) |
| 825 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; | 840 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; |
| 826 | 841 |
| 827 if (current_key_system_.isEmpty() || key_system != current_key_system_) | 842 if (current_key_system_.empty() || key_system != current_key_system_) |
| 828 return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; | 843 return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; |
| 829 | 844 |
| 830 proxy_decryptor_->AddKey( | 845 proxy_decryptor_->AddKey( |
| 831 key, key_length, init_data, init_data_length, session_id.utf8()); | 846 key, key_length, init_data, init_data_length, session_id); |
| 832 return WebMediaPlayer::MediaKeyExceptionNoError; | 847 return WebMediaPlayer::MediaKeyExceptionNoError; |
| 833 } | 848 } |
| 834 | 849 |
| 835 WebMediaPlayer::MediaKeyException WebMediaPlayerImpl::cancelKeyRequest( | 850 WebMediaPlayer::MediaKeyException WebMediaPlayerImpl::cancelKeyRequest( |
| 836 const WebString& key_system, | 851 const WebString& key_system, |
| 837 const WebString& session_id) { | 852 const WebString& session_id) { |
| 853 DVLOG(1) << "cancelKeyRequest: " << base::string16(key_system) << ": " |
| 854 << " [" << base::string16(session_id) << "]"; |
| 855 |
| 856 std::string ascii_key_system = ToASCIIOrEmpty(key_system); |
| 857 std::string ascii_session_id = ToASCIIOrEmpty(session_id); |
| 858 |
| 838 WebMediaPlayer::MediaKeyException e = | 859 WebMediaPlayer::MediaKeyException e = |
| 839 CancelKeyRequestInternal(key_system, session_id); | 860 CancelKeyRequestInternal(ascii_key_system, ascii_session_id); |
| 840 ReportMediaKeyExceptionToUMA("cancelKeyRequest", key_system, e); | 861 ReportMediaKeyExceptionToUMA("cancelKeyRequest", ascii_key_system, e); |
| 841 return e; | 862 return e; |
| 842 } | 863 } |
| 843 | 864 |
| 844 WebMediaPlayer::MediaKeyException | 865 WebMediaPlayer::MediaKeyException |
| 845 WebMediaPlayerImpl::CancelKeyRequestInternal( | 866 WebMediaPlayerImpl::CancelKeyRequestInternal( |
| 846 const WebString& key_system, | 867 const std::string& key_system, |
| 847 const WebString& session_id) { | 868 const std::string& session_id) { |
| 848 if (!IsConcreteSupportedKeySystem(key_system)) | 869 if (!IsConcreteSupportedKeySystem(key_system)) |
| 849 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; | 870 return WebMediaPlayer::MediaKeyExceptionKeySystemNotSupported; |
| 850 | 871 |
| 851 if (current_key_system_.isEmpty() || key_system != current_key_system_) | 872 if (current_key_system_.empty() || key_system != current_key_system_) |
| 852 return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; | 873 return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; |
| 853 | 874 |
| 854 proxy_decryptor_->CancelKeyRequest(session_id.utf8()); | 875 proxy_decryptor_->CancelKeyRequest(session_id); |
| 855 return WebMediaPlayer::MediaKeyExceptionNoError; | 876 return WebMediaPlayer::MediaKeyExceptionNoError; |
| 856 } | 877 } |
| 857 | 878 |
| 858 void WebMediaPlayerImpl::setContentDecryptionModule( | 879 void WebMediaPlayerImpl::setContentDecryptionModule( |
| 859 blink::WebContentDecryptionModule* cdm) { | 880 blink::WebContentDecryptionModule* cdm) { |
| 860 DCHECK(main_loop_->BelongsToCurrentThread()); | 881 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 861 | 882 |
| 862 // TODO(xhwang): Support setMediaKeys(0) if necessary: http://crbug.com/330324 | 883 // TODO(xhwang): Support setMediaKeys(0) if necessary: http://crbug.com/330324 |
| 863 if (!cdm) | 884 if (!cdm) |
| 864 return; | 885 return; |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 973 | 994 |
| 974 void WebMediaPlayerImpl::OnDemuxerOpened() { | 995 void WebMediaPlayerImpl::OnDemuxerOpened() { |
| 975 DCHECK(main_loop_->BelongsToCurrentThread()); | 996 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 976 client_->mediaSourceOpened(new WebMediaSourceImpl( | 997 client_->mediaSourceOpened(new WebMediaSourceImpl( |
| 977 chunk_demuxer_, base::Bind(&LogMediaSourceError, media_log_))); | 998 chunk_demuxer_, base::Bind(&LogMediaSourceError, media_log_))); |
| 978 } | 999 } |
| 979 | 1000 |
| 980 void WebMediaPlayerImpl::OnKeyAdded(const std::string& session_id) { | 1001 void WebMediaPlayerImpl::OnKeyAdded(const std::string& session_id) { |
| 981 DCHECK(main_loop_->BelongsToCurrentThread()); | 1002 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 982 EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1); | 1003 EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1); |
| 983 client_->keyAdded(current_key_system_, WebString::fromUTF8(session_id)); | 1004 client_->keyAdded(WebString::fromUTF8(current_key_system_), |
| 1005 WebString::fromUTF8(session_id)); |
| 984 } | 1006 } |
| 985 | 1007 |
| 986 void WebMediaPlayerImpl::OnNeedKey(const std::string& type, | 1008 void WebMediaPlayerImpl::OnNeedKey(const std::string& type, |
| 987 const std::vector<uint8>& init_data) { | 1009 const std::vector<uint8>& init_data) { |
| 988 DCHECK(main_loop_->BelongsToCurrentThread()); | 1010 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 989 | 1011 |
| 990 // Do not fire NeedKey event if encrypted media is not enabled. | 1012 // Do not fire NeedKey event if encrypted media is not enabled. |
| 991 if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() && | 1013 if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() && |
| 992 !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) { | 1014 !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) { |
| 993 return; | 1015 return; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 | 1052 |
| 1031 void WebMediaPlayerImpl::OnKeyError(const std::string& session_id, | 1053 void WebMediaPlayerImpl::OnKeyError(const std::string& session_id, |
| 1032 media::MediaKeys::KeyError error_code, | 1054 media::MediaKeys::KeyError error_code, |
| 1033 int system_code) { | 1055 int system_code) { |
| 1034 DCHECK(main_loop_->BelongsToCurrentThread()); | 1056 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 1035 | 1057 |
| 1036 EmeUMAHistogramEnumeration(current_key_system_, "KeyError", | 1058 EmeUMAHistogramEnumeration(current_key_system_, "KeyError", |
| 1037 error_code, media::MediaKeys::kMaxKeyError); | 1059 error_code, media::MediaKeys::kMaxKeyError); |
| 1038 | 1060 |
| 1039 client_->keyError( | 1061 client_->keyError( |
| 1040 current_key_system_, | 1062 WebString::fromUTF8(current_key_system_), |
| 1041 WebString::fromUTF8(session_id), | 1063 WebString::fromUTF8(session_id), |
| 1042 static_cast<blink::WebMediaPlayerClient::MediaKeyErrorCode>(error_code), | 1064 static_cast<blink::WebMediaPlayerClient::MediaKeyErrorCode>(error_code), |
| 1043 system_code); | 1065 system_code); |
| 1044 } | 1066 } |
| 1045 | 1067 |
| 1046 void WebMediaPlayerImpl::OnKeyMessage(const std::string& session_id, | 1068 void WebMediaPlayerImpl::OnKeyMessage(const std::string& session_id, |
| 1047 const std::vector<uint8>& message, | 1069 const std::vector<uint8>& message, |
| 1048 const std::string& default_url) { | 1070 const std::string& default_url) { |
| 1049 DCHECK(main_loop_->BelongsToCurrentThread()); | 1071 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 1050 | 1072 |
| 1051 const GURL default_url_gurl(default_url); | 1073 const GURL default_url_gurl(default_url); |
| 1052 DLOG_IF(WARNING, !default_url.empty() && !default_url_gurl.is_valid()) | 1074 DLOG_IF(WARNING, !default_url.empty() && !default_url_gurl.is_valid()) |
| 1053 << "Invalid URL in default_url: " << default_url; | 1075 << "Invalid URL in default_url: " << default_url; |
| 1054 | 1076 |
| 1055 client_->keyMessage(current_key_system_, | 1077 client_->keyMessage(WebString::fromUTF8(current_key_system_), |
| 1056 WebString::fromUTF8(session_id), | 1078 WebString::fromUTF8(session_id), |
| 1057 message.empty() ? NULL : &message[0], | 1079 message.empty() ? NULL : &message[0], |
| 1058 message.size(), | 1080 message.size(), |
| 1059 default_url_gurl); | 1081 default_url_gurl); |
| 1060 } | 1082 } |
| 1061 | 1083 |
| 1062 void WebMediaPlayerImpl::SetOpaque(bool opaque) { | 1084 void WebMediaPlayerImpl::SetOpaque(bool opaque) { |
| 1063 DCHECK(main_loop_->BelongsToCurrentThread()); | 1085 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 1064 | 1086 |
| 1065 client_->setOpaque(opaque); | 1087 client_->setOpaque(opaque); |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1323 | 1345 |
| 1324 if (web_cdm_) { | 1346 if (web_cdm_) { |
| 1325 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); | 1347 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); |
| 1326 return; | 1348 return; |
| 1327 } | 1349 } |
| 1328 | 1350 |
| 1329 decryptor_ready_cb_ = decryptor_ready_cb; | 1351 decryptor_ready_cb_ = decryptor_ready_cb; |
| 1330 } | 1352 } |
| 1331 | 1353 |
| 1332 } // namespace content | 1354 } // namespace content |
| OLD | NEW |