Index: media/cdm/ppapi/cdm_adapter.cc |
diff --git a/media/cdm/ppapi/cdm_adapter.cc b/media/cdm/ppapi/cdm_adapter.cc |
index 4d8f038cde575ee3b9d8c7e89e46d3b86be19d77..0083f577ce86d8f91e8ec43b7671170a4a4b62b8 100644 |
--- a/media/cdm/ppapi/cdm_adapter.cc |
+++ b/media/cdm/ppapi/cdm_adapter.cc |
@@ -9,6 +9,7 @@ |
#include "media/cdm/ppapi/cdm_logging.h" |
#include "media/cdm/ppapi/supported_cdm_versions.h" |
#include "ppapi/c/ppb_console.h" |
+#include "ppapi/cpp/private/uma_private.h" |
#if defined(CHECK_DOCUMENT_URL) |
#include "ppapi/cpp/dev/url_util_dev.h" |
@@ -224,6 +225,8 @@ CdmAdapter::CdmAdapter(PP_Instance instance, pp::Module* module) |
output_link_mask_(0), |
output_protection_mask_(0), |
query_output_protection_in_progress_(false), |
+ uma_for_output_protection_query_reported_(false), |
+ uma_for_output_protection_result_reported_(false), |
#endif |
allocator_(this), |
cdm_(NULL), |
@@ -841,6 +844,11 @@ void CdmAdapter::QueryOutputProtectionStatus() { |
&CdmAdapter::QueryOutputProtectionStatusDone)); |
if (result == PP_OK_COMPLETIONPENDING) { |
query_output_protection_in_progress_ = true; |
+ if (!uma_for_output_protection_query_reported_) { |
+ ReportOutputProtectionStatus(OUTPUT_PROTECTION_QUERIED); |
+ uma_for_output_protection_query_reported_ = true; |
+ } |
+ |
return; |
} |
@@ -883,6 +891,25 @@ cdm::FileIO* CdmAdapter::CreateFileIO(cdm::FileIOClient* client) { |
} |
#if defined(OS_CHROMEOS) |
+void CdmAdapter::ReportOutputProtectionStatus(OutputProtectionStatus status) { |
+ pp::UMAPrivate uma_interface_(this); |
+ std::string uma_name = "Media.EME.OutputProtection"; |
+ uma_interface_.HistogramEnumeration(uma_name, status, OUTPUT_PROTECTION_MAX); |
+} |
+ |
+void CdmAdapter::ReportOutputProtectionQueryResult(int32_t result) { |
+ // Report UMAs for output protection query result. |
+ uint32_t external_links = (output_link_mask_ & ~cdm::kLinkTypeInternal); |
+ if (result != PP_OK) |
+ ReportOutputProtectionStatus(OUTPUT_PROTECTION_QUERY_ERROR); |
+ else if (!external_links) |
+ ReportOutputProtectionStatus(OUTPUT_PROTECTION_NO_EXTERNAL_LINK); |
+ else if ((output_protection_mask_ & external_links) == external_links) |
+ ReportOutputProtectionStatus(OUTPUT_PROTECTION_EXTERNAL_LINK_PROTECTED); |
+ else |
+ ReportOutputProtectionStatus(OUTPUT_PROTECTION_EXTERNAL_LINK_NOT_PROTECTED); |
+} |
+ |
void CdmAdapter::SendPlatformChallengeDone(int32_t result) { |
challenge_in_progress_ = false; |
@@ -928,6 +955,11 @@ void CdmAdapter::QueryOutputProtectionStatusDone(int32_t result) { |
if (result != PP_OK) |
output_link_mask_ = output_protection_mask_ = 0; |
+ if (!uma_for_output_protection_result_reported_) { |
+ ReportOutputProtectionQueryResult(result); |
+ uma_for_output_protection_result_reported_ = true; |
+ } |
+ |
cdm_->OnQueryOutputProtectionStatus(output_link_mask_, |
output_protection_mask_); |
} |